2017-06-05 96 views
0

我需要访问另一个应用程序的共享偏好文件。 (该设备已植根!)目前,我似乎正面临许可问题。下面是我运行当前的代码:阅读另一个Android应用程序的共享偏好

Context con = createPackageContext("com.sam.sample", CONTEXT_IGNORE_SECURITY); 
SharedPreferences sharedPref = con.getSharedPreferences("namefile", MODE_PRIVATE); 
Map data = sharedPref.getString("name", ""); 
Log.d("Name", "name:" + name); 

当我运行这段代码,我得到了以下错误:

Attempt to read preferences file /data/data/com.sam.sample/shared_prefs/namefile.xml without permission

我也想跑su命令,但我不希望用户可以通知我想要在XML文件上使用chmod 775读取访问权限。

任何帮助表示赞赏。

回答

1

要在“com.sam.sample”中创建SharedPreference时执行此操作,它应该使用Context.MODE_WORLD_READABLE模式创建。所以,如果你有“com.sam.sample”应用程序的代码,它应该看起来像下面

SharedPreferences prefs = getSharedPreferences("namefile", 
       Context.MODE_WORLD_READABLE); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString("name", strShareValue); 
     editor.commit(); 

另外请注意,改变模式Context.MODE_WORLD_READABLE不推荐,因为它可能会导致安全漏洞。从NOS开始,这将引发SecurityException。更多信息: -

https://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE

理想的ContentProvider应该被使用。

为了您的ContentProvider的例子查询功能可以

MatrixCursor cursor = new MatrixCursor(new String[] { "name" }, 1); cursor.addRow(new Object[] { readSharedPreference() }); return cursor;

+0

有没有办法,我可以用ContentResolver的访问SharedPreferences的方法吗? –

+0

是的只是返回具有来自ContentProvider的查询函数的共享偏好数据的光标(通常是MatrixCursor)。在修改的答案中查看示例查询功能 – AnswerBot