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

本文详细介绍了如何利用 Android Fragment 实现权限申请的优雅处理,包括请求权限的方法封装,随机生成唯一请求码,以及处理回调。同时,文章还展示了如何通过 Fragment 代理来优化 onActivityResult 的处理,提高代码可读性和可维护性。通过对 Fragment 的深入理解和巧妙应用,开发者可以更好地管理权限请求和 Activity 结果返回。
摘要由CSDN通过智能技术生成

super.onCreate(savedInstanceState);

// 设置为 true,表示 configuration change 的时候,fragment 实例不会背重新创建

setRetainInstance(true);

mActivity = getActivity();

}

public void requestPermissions(@NonNull String[] permissions, IPermissionListenerWrap.IPermissionListener callback) {

int requestCode = makeRequestCode();

mCallbacks.put(requestCode, callback);

requestPermissions(permissions, requestCode);

}

public void requestEachPermissions(@NonNull String[] permissions, IPermissionListenerWrap.IEachPermissionListener callback) {

int requestCode = makeRequestCode();

mEachCallbacks.put(requestCode, callback);

requestPermissions(permissions, requestCode);

}

/**

  • 随机生成唯一的requestCode,最多尝试10次

  • @return

*/

private int makeRequestCode() {

int requestCode;

int tryCount = 0;

do {

requestCode = mCodeGenerator.nextInt(0x0000FFFF);

tryCount++;

} while (mCallbacks.indexOfKey(requestCode) >= 0 && tryCount < 10);

return requestCode;

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

handlePermissionCallBack(requestCode, grantResults);

handleEachPermissionCallBack(requestCode, permissions, grantResults);

}

private void handlePermissionCallBack(int requestCode, @NonNull int[] grantResults) {

IPermissionListenerWrap.IPermissionListener callback = mCallbacks.get(requestCode);

mCallbacks.remove(requestCode);

if (callback == null) {

return;

}

boolean allGranted = false;

int length = grantResults.length;

for (int i = 0; i < length; i++) {

int grantResult = grantRe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值