我在堆栈上发现了相同的问题并以这种方式使用
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总是空的。
答案 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 强烈建议不要使用:
创建世界可读文件非常危险,并且可能会在应用程序中造成安全漏洞。强烈劝阻;相反,应用程序应使用更正式的交互机制,例如ContentProvider,BroadcastReceiver和Service。
因此,如果您要访问的应用程序不是由您自己开发的,我认为它的SP是私有的,如果它是您自己的应用程序,那么您应该找到一种不同的方式来共享数据。