Android Fragment 的妙用 - 优雅地申请权限和处理 onActivityResult

  • 在 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 mCallbacks = new SparseArray<>();

private SparseArray mEachCallbacks = new SparseArray<>();

private Random mCodeGenerator = new Random();

private FragmentActivity mActivity;

public EachPermissionFragment() {

// Required empty public constructor

}

public static EachPermissionFragment newInstance() {

你可能感兴趣的:(程序员,面试,移动开发,android)