安卓中MODE_WORLD_READABLE的SharedPreferences已经被弃用,有什么替代方案?

14
我正在开发Android应用程序A,以便另一个应用程序B可以读取A的SharedPreferences。在android.content.Context的javadoc中,关于MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE都提到了以下内容:
此常量已在API级别17中弃用。创建可被全局读写的文件非常危险,并且可能会在应用程序中引起安全漏洞。强烈不建议使用;相反,应用程序应该使用更正式的机制进行交互,如ContentProvider、BroadcastReceiver和Service。
根据这个说明,A应该使用MODE_PRIVATE标志保存其SharedPreferences,并提供一个ContentProvider,以便B可以查询A的ContentProvider。但是我怎么知道SharedPreferences Uri呢?
我猜它应该像content://authority_name/preference_file_name,但这对我没有效果。如果您能提供正确的示例,我将不胜感激。
总的来说,是否可以访问其他应用程序的MODE_PRIVATE SharedPreferences?

3
不,无法访问其他应用程序的MODE_PRIVATE共享首选项。您可以参考链接http://developer.android.com/reference/android/content/Context.html#MODE_PRIVATE。 - Madhu
@Madhu,如果我知道Provider的权限和Preference的文件名,是否可以将SharedPreferences与ContentProvider进行接口? - Jay Foreman
1
我们无法将SharedPreferences与ContentProvider进行接口连接。 - Madhu
这两个应用都是你开发的吗? - Abdullah
@Abdullah,是的,它们是。 - Jay Foreman
显示剩余2条评论
1个回答

2

如果您的数据不太私密,请使用sdcard存储。

可以访问其他应用程序的MODE_PRIVATE Sahredpreferences:它们具有相同的uid。也就是说,在AndroidManifest.xml中具有相同的签名和“sharedUserId”。


你能详细说明一下你的回答吗(也许附上代码)?现在的情况是,我正在使用[SyncAdapter](http://developer.android.com/training/sync-adapters/creating-sync-adapter.html)模式来通知用户进行更新。然而,在`AbstractThreadedSyncAdapter.onPerformSync()`方法中,我不能使用传递给该方法的`Context`访问应用程序的默认共享首选项。 - fahmy
这个答案的建议可能会导致新的难以解决的问题,当两个应用程序需要存在并在同一设备上运行时... - Maria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接