Skip to content

Instantly share code, notes, and snippets.

@alphamu
Last active May 17, 2019 09:03
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save alphamu/f7e6eccc5459a2ffef66 to your computer and use it in GitHub Desktop.
Save alphamu/f7e6eccc5459a2ffef66 to your computer and use it in GitHub Desktop.
Gist showing use cases of headless Fragments to request Android-M runtime permissions
public class CameraMicPermissionHelper extends Fragment {
private static final int REQUEST_CAMERA_MIC_PERMISSIONS = 10;
public static final String TAG = "CamMicPerm";
private CameraMicPermissionCallback mCallback;
private static boolean sCameraMicPermissionDenied;
public static CameraMicPermissionHelper newInstance() {
return new CameraMicPermissionHelper();
}
public CameraMicPermissionHelper() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof CameraMicPermissionCallback) {
mCallback = (CameraMicPermissionCallback) activity;
} else {
throw new IllegalArgumentException("activity must extend BaseActivity and implement LocationHelper.LocationCallback");
}
}
@Override
public void onDetach() {
super.onDetach();
mCallback = null;
}
public void checkCameraMicPermissions() {
if (PermissionUtil.hasSelfPermission(getActivity(), new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO})) {
mCallback.onCameraMicPermissionGranted();
} else {
// UNCOMMENT TO SUPPORT ANDROID M RUNTIME PERMISSIONS
if (!sCameraMicPermissionDenied) {
requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, REQUEST_CAMERA_MIC_PERMISSIONS);
}
}
}
public void setCameraMicPermissionDenied(boolean cameraMicPermissionDenied) {
this.sCameraMicPermissionDenied = cameraMicPermissionDenied;
}
public static boolean isCameraMicPermissionDenied() {
return sCameraMicPermissionDenied;
}
/**
* Callback received when a permissions request has been completed.
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == REQUEST_CAMERA_MIC_PERMISSIONS) {
if (PermissionUtil.verifyPermissions(grantResults)) {
mCallback.onCameraMicPermissionGranted();
} else {
Log.i("BaseActivity", "LOCATION permission was NOT granted.");
mCallback.onCameraMicPermissionDenied();
}
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
public interface CameraMicPermissionCallback {
void onCameraMicPermissionGranted();
void onCameraMicPermissionDenied();
}
}
@pantos27
Copy link

you can use now FragmentCompat for this purpose in a fragment
http://developer.android.com/reference/android/support/v13/app/FragmentCompat.html

@lanetteamkaushal
Copy link

@pantos27 FragmentCompat does not have support for v4.Fragment. Do you have any code for using FragmentCompat ?

@Kostanos
Copy link

Hi, thank you for the code.
Would be also helpful the gist with example how to use it in main activity for example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment