本文最后更新于 92 天前,其中的信息可能已经有所发展或是发生改变。
public class GmStoragePermissionFragment extends Fragment {
private static GmOnPermissionResult gmOnPermissionResult;
public static void requestPermission(Activity activity, GmOnPermissionResult permissionResult) {
gmOnPermissionResult = permissionResult;
activity.getFragmentManager()
.beginTransaction()
.add(new GmStoragePermissionFragment(), activity.getLocalClassName())
.commitAllowingStateLoss();
}
private final int requestCode = 522;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String[] permission = new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE};
GameHelperInnerLog.d(">>>>>>>>>>>>>>>>>>>开始申请权限 requestCoe " + requestCode);
requestPermissions(permission, requestCode);
}
}
private boolean checkSelfPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return getActivity().checkSelfPermission(READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
getActivity().checkSelfPermission(WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
GameHelperInnerLog.d("PermissionFragment onActivityResult: ");
if (requestCode == this.requestCode) {
if (gmOnPermissionResult != null) {
gmOnPermissionResult.permissionResult(checkSelfPermission());
}
GameHelperInnerLog.d("PermissionFragment onActivityResult: checkSelfPermission " + checkSelfPermission());
gmOnPermissionResult = null;
// 将Fragment移除
getFragmentManager().beginTransaction().remove(this).commitAllowingStateLoss();
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
// or
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == PermissionUtils.requestCode) {
// 需要延迟执行,不然即使授权,仍有部分机型获取不到权限
Handler(Looper.getMainLooper()).postDelayed({
val activity = activity ?: return@postDelayed
val check = PermissionUtils.checkPermission(activity)
GameHelperInnerLog.i("PermissionFragment onActivityResult: $check")
// 回调权限结果
onPermissionResult?.permissionResult(check)
onPermissionResult = null
// 将Fragment移除
fragmentManager.beginTransaction().remove(this).commitAllowingStateLoss()
}, 500)
}
}
}