Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用其他应用程序的共享首选项_Android_Sharedpreferences - Fatal编程技术网

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

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

我在stack上找到了同样的问题,并使用了这种方式

   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文件。无论如何,感谢您的帮助。我会尽量用正确的方法做