Android 使用其他应用程序的共享首选项
我在stack上找到了同样的问题,并使用了这种方式Android 使用其他应用程序的共享首选项,android,sharedpreferences,Android,Sharedpreferences,我在stack上找到了同样的问题,并使用了这种方式 public void setProgramAllProgress(int all){ SharedPreferences prefs = CApplication.getAppContext().getSharedPreferences(BASE_PATH, Context.MODE_WORLD_READABLE); SharedPreferences.Editor edi
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始终为空。关于我认为您必须执行以下操作:
在应用程序1中:
SharedPreferences prefs = getSharedPreferences("demopref",
Context.MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("demostring", strShareValue);
editor.commit();
在应用程序2中:
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());
}
告诉我它是否有效!:)
编辑:无论如何,这是最好的方法
编辑2:如果您强烈希望使用SharedPref,请尝试在清单中添加以下内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hello"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="com.example"> //<-- this line
/在将数据写入SP时需要使用您想要访问的SP的应用程序。此常量已被弃用,谷歌强烈建议不要使用它:
创建世界可读的文件是非常危险的,并且可能会在应用程序中造成安全漏洞。强烈劝阻;相反,应用程序应该使用更正式的交互机制,例如,和
因此,如果您要访问的应用程序不是由您自己开发的,我假设它的SP是私有的,如果它是您自己的应用程序,您应该找到一种不同的方法来共享数据。我认为您不能访问其他应用程序的共享引用。@iturki您可以,但前提是应用程序已将它们设置为世界可读,这是不赞成的。所以没有人应该使用它,但它是可能的。@F43nd1r如果可能的话,为什么它不起作用。如果它被弃用,我应该用什么来代替呢?@JenyaKirmiza对于单向数据共享使用内容提供者。对于双向通信,使用一种可能的IPC方法(谷歌it),我也在这样做。它不起作用了。我只能看到当前应用程序保存的Pref。我不想看到,但我想我需要ContentProvider@JenyaKirmiza试试我发布的最后一次编辑,也许可以,谢谢。现在它开始工作了。我还有一个问题:使用ContentProvider实现此目的是否困难?我没有用它earlier@JenyaKirmiza不幸的是,我以前也从未使用过它们,我刚刚在网上读到它们是实现这一目的所必需的,我用我找到的指南编辑:)什么方法?内容提供者?或者在存储上创建一些文件?我从来没有碰巧实现过ContentProvider(老实说,我不知道它们的所有功能),但我认为您应该使用它们,因为它们是推荐的方式,并且正是为此目的而构建的。SharedReferences也只是应用程序数据目录中的XML文件。无论如何,感谢您的帮助。我会尽量用正确的方法做