我想在Settings.secure数据库中修改一些东西,就像android设置应用程序那样:
Settings.Secure.putString(
getContentResolver(),
Settings.Secure.VOICE_RECOGNITION_SERVICE,
setting);
我在AndroidManifest.xml中添加了以下权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
不幸的是,该应用程序中止说:
E / DatabaseUtils(147):向parcel E / DatabaseUtils写入异常( 147):java.lang.SecurityException:Permission denial:写入 安全设置需要android.permission.WRITE_SECURE_SETTINGS E / DatabaseUtils(147):at com.android.providers.settings.SettingsProvider.checkWritePermissions(SettingsProvider.java:211) E / DatabaseUtils(147):at com.android.providers.settings.SettingsProvider.insert(SettingsProvider.java:552) E / DatabaseUtils(147):at android.content.ContentProvider $ Transport.insert(ContentProvider.java:198) E / DatabaseUtils(147):at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146) E / DatabaseUtils(147):at android.os.Binder.execTransact(Binder.java:320)E / DatabaseUtils( 147):at dalvik.system.NativeStart.run(Native Method)
如果我使用平台密钥签署此应用程序就可以了,但对于不同的系统,平台密钥似乎不同。它无法在其他设备上运行。
我该如何做到这一点?
答案 0 :(得分:1)
回答我自己的问题:
在frameworks / base / core / res / AndroidManifest.xml中,使用protectionLevel signatureOrSystem声明WRITE_SECURE_SETTINGS。因此普通应用程序无法获得此权限,除非将其放入系统映像,或使用框架res apk使用的相同密钥进行签名。