自定义处理权限请求
IMKit SDK 的会话页面提供了发送图片、语音、文件、发起通话等功能。在调用涉及敏感权限的 API 时,IMKit 均会向用户申请权限,在权限请求通过后,才会继续执行任务。
IMKit 并未开放与权限申请相关的 UI。如果应用程序需要自定义权限申请的 UI 界面,可以拦截 IMKit 的权限申请。例如,应用程序可以在 IMKit 申请敏感权限时,在自定义页面上同步告知用户申请该敏感权限的目的,满足上架应用市场的合规要求。
拦截权限请求
提示
以下方式在小于 5.6.3 版本的开发版 IMKit 上无法拦截到相册中拍照时的权限请求。建议您使用最新的开发版。稳定版 SDK 从 5.7.0 后开始支持。
建议在进入会话页面前,使用 PermissionCheckUtil 的 setRequestPermissionListListener 方法,在 onRequestPermissionList
回调中您来自定义处理权限请求。
权限处理完成后,通过 IPermissionEventCallback 告知 IMKit 权限请求结果。confirmed
代表权限通过,cancelled
代表权限不通过。
PermissionCheckUtil.setRequestPermissionListListener(
new PermissionCheckUtil.IRequestPermissionListListener() {
@Override
public void onRequestPermissionList(
Context activity,
List<String> permissionsNotGranted,
PermissionCheckUtil.IPermissionEventCallback callback) {
AlertDialog dialog =
new AlertDialog.Builder(
activity,
android.R
.style
.Theme_DeviceDefault_Light_Dialog_Alert)
.setMessage("向用户说明申请权限")
.setPositiveButton(
"去申请",
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog, int which) {
dialog.dismiss();
callback.confirmed();
}
})
.setNegativeButton(
"取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog, int which) {
dialog.dismiss();
callback.cancelled();
}
})
.show();
}
});
参考资源
- 如果需要描述 IMKit 申请敏感权限的目的,可参考 SDK 隐私政策。