【问题标题】:Read shared preference of another android application阅读另一个 android 应用程序的共享偏好
【发布时间】:2017-06-05 18:43:55
【问题描述】:

我需要访问另一个应用程序的共享首选项文件。 (设备已root!)目前我似乎面临权限问题。这是我运行的当前代码:

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 命令,但我不希望用户收到通知我想通过chmod 775 获得对XML 文件的读取访问权限。

感谢任何帮助。

【问题讨论】:

    标签: java android


    【解决方案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;

    【讨论】:

    • 有没有办法可以使用 ContentResolver 访问 SharedPreferences ?
    • 是的,只需从 ContentProvider 的查询函数返回具有 sharedpreference 数据的游标(通常是 MatrixCursor)。请参阅修改答案中的示例查询函数
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 2023-03-15
    • 2011-09-09
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多