阅读另一个Android应用程序的共享首选项

时间:2017-06-05 18:43:56

标签: java 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);

当我运行此代码时,我收到以下错误:

  

未经许可尝试读取偏好设置文件 /data/data/com.sam.sample/shared_prefs/namefile.xml

我还尝试运行su命令,但我不希望通知用户我希望在XML文件上获得chmod 775的读取权限。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在" 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;