我正在 Android 6 模拟器下测试我的应用程序,我发现它开始崩溃并出现以下异常:
Caused by: java.lang.SecurityException: net.hubalek.android.xxx was not granted this permission: android.permission.WRITE_SETTINGS.
at android.os.Parcel.readException(Parcel.java:1599)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.call(ContentProviderNative.java:646)
at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:1322)
at android.provider.Settings$System.putStringForUser(Settings.java:1671)
at android.provider.Settings$System.putIntForUser(Settings.java:1776)
at android.provider.Settings$System.putInt(Settings.java:1770)
....
经过进一步研究,我发现根据http://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS上的 javadoc它有protectionLevel="signature"
我猜在以前版本的 Android 中,保护程度较低(normal
或者dangerous
,我不记得了)。
我的问题是:有什么办法可以克服这种变化?在https://developer.android.com/reference/android/R.attr.html#protectionLevel写着
仅当请求应用程序使用与声明权限的应用程序相同的证书签名时,系统才会授予该权限。如果证书匹配,系统会自动授予权限,无需通知用户或请求用户明确批准。
但是在涉及系统权限时,我不明白如何满足这个条件。