使用其他应用程序的共享首选项

时间:2015-08-26 12:16:54

标签: android sharedpreferences

我在堆栈上发现了相同的问题并以这种方式使用

   public void setProgramAllProgress(int all){
        SharedPreferences prefs = CApplication.getAppContext().getSharedPreferences(BASE_PATH,
                Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putInt("all", all);
        editor.commit();
    }


    public int getProgramAllProgress(String packageName){
       Context con=null;
        try {
            con = CApplication.getAppContext().createPackageContext(packageName, 0);
            SharedPreferences pref = con.getSharedPreferences(
                    BASE_PATH, Context.MODE_PRIVATE);
            int data = pref.getInt("all", -1);
            return data;
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("Not data shared", e.toString());
        }
        return -1;
    }

但它不起作用。我从包中获取上下文,但SharefPrefs总是空的。

2 个答案:

答案 0 :(得分:1)

指的是this question我认为您必须执行以下操作:

在Application1中:

wgPageContentLanguage

,在应用程序2中:

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

告诉我它是否有效!:)

编辑:无论如何,Content Providers是最好的方法

编辑2:如果您非常想使用sharedPrefs,请尝试在清单中添加:

try {
    con = createPackageContext("com.sharedpref1", 0);
    SharedPreferences pref = con.getSharedPreferences(
    "demopref", Context.MODE_PRIVATE);
    String data = pref.getString("demostring", "No Value");
    displaySharedValue.setText(data);
} catch (NameNotFoundException e) {
    Log.e("Not data shared", e.toString());
}

编辑3:here是有关如何使用ContentProvider的指南:)

答案 1 :(得分:1)

在将数据写入SP时,要求您要访问的SP的应用程序使用MODE_WORLD_READABLE常量已弃用,Google 强烈建议不要使用

  

创建世界可读文件非常危险,并且可能会在应用程序中造成安全漏洞。强烈劝阻;相反,应用程序应使用更正式的交互机制,例如ContentProviderBroadcastReceiverService

因此,如果您要访问的应用程序不是由您自己开发的,我认为它的SP是私有的,如果它是您自己的应用程序,那么您应该找到一种不同的方式来共享数据。