我在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处有书面
仅当请求的应用程序使用与声明权限的应用程序相同的证书进行签名时,系统才会授予的权限。如果证书匹配,系统会自动授予权限,而不会通知用户或要求用户明确批准。
但我不了解在考虑系统权限时如何满足这一条件。