- 在 onRequestPermissionsResult 方法里面进行处理,然后进行相应的操作。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 10) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
callPhone();
} else {
// Permission Denied
Toast.makeText(TestResultActivity.this, “Permission Denied”, Toast.LENGTH_SHORT).show();
}
return;
}
}
看到这样的代码你会不会很烦,每次涉及权限操作的时候,都要写这样一堆这样重复的代码,枯燥,且很多代码逻辑会耦合在 Activity 中,不方便维护。那有没有办法,将这些繁琐的步骤封装起来呢,答案是有的。
现在网上的做法一般有以下几种
-
使用透明的 Activity 进行申请
-
使用 Fragment 进行申请
-
反射
-
AOSP
这里我们使用 Fragment 进行封装。
我们知道, Fragment 一般依赖于 Activity 存活,并且生命周期跟 Activity 差不多,因此,我们进行权限申请的时候,可以利用透明的 Fragment 进行申请,在里面处理完之后,再进行相应的回调。
-
当我们申请权限申请的时候,先查找我们当前 Activity 是否存在代理 fragment,不存在,进行添加,并使用代理 Fragment 进行申请权限
-
第二步:在代理 Fragment 的 onRequestPermissionsResult 方法进行相应的处理,判断是否授权成功
-
第三步:进行相应的回调
首先,我们先来看一下代理 Fragment EachPermissionFragment 是怎么封装的?
public class EachPermissionFragment extends Fragment {
private SparseArray<IPermissionListenerWrap.IPermissionListener> mCallbacks = new SparseArray<>();
private SparseArray<IPermissionListenerWrap.IEachPermissionListener> mEachCallbacks = new SparseArray<>();
private Random mCodeGenerator = new Random();
private FragmentActivity mActivity;
public EachPermissionFragment() {
// Required empty public constructor
}
public static EachPermissionFragment newInstanc