SecurityException
是Android系统中当应用程序尝试执行没有权限的操作时抛出的运行时异常。SECURE PERMISSION
通常指Android系统中保护敏感数据或关键功能的高级别权限。
出现SecurityException
通常有以下几种原因:
android.permission.BIND_ACCESSIBILITY_SERVICE
android.permission.BIND_VPN_SERVICE
android.permission.WRITE_SECURE_SETTINGS
android.permission.INSTALL_PACKAGES
android.permission.SYSTEM_ALERT_WINDOW
(悬浮窗权限)android.permission.WRITE_SETTINGS
在AndroidManifest.xml中添加所需权限:
<manifest ...>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<!-- 其他权限 -->
</manifest>
对于危险权限,需要动态请求:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE);
}
如WRITE_SETTINGS权限需要特殊处理:
if (!Settings.System.canWrite(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
如果是签名权限问题,需要:
WRITE_SECURE_SETTINGS
权限BIND_VPN_SERVICE
权限REQUEST_INSTALL_PACKAGES
权限当遇到SecurityException时,检查日志获取详细信息:
adb logcat | grep SecurityException
WRITE_SECURE_SETTINGS
只能由系统应用使用通过以上分析和解决方案,应该能够解决大多数与Android SECURE PERMISSION相关的SecurityException问题。