Last active
May 17, 2019 09:03
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 FragmentCompat does not have support for v4.Fragment. Do you have any code for using FragmentCompat ?
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
you can use now FragmentCompat for this purpose in a fragment
http://developer.android.com/reference/android/support/v13/app/FragmentCompat.html