跳到主要内容

自定义处理权限请求

IMKit SDK 的会话页面提供了发送图片、语音、文件、发起通话等功能。在调用涉及敏感权限的 API 时,IMKit 均会向用户申请权限,在权限请求通过后,才会继续执行任务。

IMKit 并未开放与权限申请相关的 UI。如果应用程序需要自定义权限申请的 UI 界面,可以拦截 IMKit 的权限申请。例如,应用程序可以在 IMKit 申请敏感权限时,在自定义页面上同步告知用户申请该敏感权限的目的,满足上架应用市场的合规要求。

拦截权限请求

提示

以下方式在小于 5.6.3 版本的开发版 IMKit 上无法拦截到相册中拍照时的权限请求。建议您使用最新的开发版。稳定版 SDK 存在同样问题,具体是否修复请关注 5.5.2 之后版本的更新日志。

建议在进入会话页面前,使用 PermissionCheckUtilsetRequestPermissionListListener 方法,在 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 隐私政策