无法在第3个应用程序中修改Settings.Secure数据库

时间:2011-12-23 05:25:48

标签: android

我想在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)

如果我使用平台密钥签署此应用程序就可以了,但对于不同的系统,平台密钥似乎不同。它无法在其他设备上运行。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:

在frameworks / base / core / res / AndroidManifest.xml中,使用protectionLevel signatureOrSystem声明WRITE_SECURE_SETTINGS。因此普通应用程序无法获得此权限,除非将其放入系统映像,或使用框架res apk使用的相同密钥进行签名。