是否可以通过编程方式要求Android重新加载/重新注册我的应用权限,而无需重新安装该应用或在无根设备上重新启动该设备?
我的应用程序(ClientApp)绑定到另一个应用程序(ServiceApp)在AIDL中声明的服务。 ServiceApp是我无法修改的第三方应用程序,它声明了ClientApp需要绑定到其服务的权限,因此我将该权限添加到了ClientApp的清单中:
<uses-permission android:name="com.example.service.API" />
当我在安装ClientApp之前安装ServiceApp时,一切正常。但是,当我先安装ClientApp然后安装ServiceApp时,在ClientApp中ServiceService的服务上调用bindService时会出现异常:
java.lang.SecurityException: Not allowed to bind to service Intent { act=com.example.service.API pkg=com.example.service }
我的理解是,没有为我的应用授予安装请求的权限,因为在安装ServiceApp之前未在系统中声明它。我可以通过在ClientApp清单中声明ServiceApp的权限在Android <5.0上修复它,但是由于安全原因,在Android 5.0+中是不可能的。
如果我能以某种方式从代码中重新加载权限(显然在设备重新启动时会发生这种情况),则可以解决问题。
答案 0 :(得分:0)
您应检查是否已授予许可。如果被授予,则可以使用它,否则可以将权限请求显示为弹出窗口
相机权限示例:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
{
// permission granted
}
else
{
// ask permission to user
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.CAMERA}, Constants.PermissionRequestCodes.CAMERA_REQUEST);
}