Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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,我一直在开发一个Android应用程序,它通过SharedReference文件与设备上安装的其他应用程序进行交互 此文件创建为MODE.WORLD_可读文件,每个安装的应用程序都有自己的文件,该文件具有通用定义的名称和属性(更改的是该特定属性的值) 例如,AppA和AppB都应该有一个名为“app_shared_file.xml”的共享文件,其属性为“property_shared_file” 从我的应用程序中,我想首先访问该文件并读取该属性值,并根据该结果创建/更新我的属性值 然而,我在实现

我一直在开发一个Android应用程序,它通过SharedReference文件与设备上安装的其他应用程序进行交互

此文件创建为MODE.WORLD_可读文件,每个安装的应用程序都有自己的文件,该文件具有通用定义的名称和属性(更改的是该特定属性的值)

例如,AppA和AppB都应该有一个名为“app_shared_file.xml”的共享文件,其属性为“property_shared_file”

从我的应用程序中,我想首先访问该文件并读取该属性值,并根据该结果创建/更新我的属性值

然而,我在实现这一点上遇到了一些问题。在Android文档中,我看到:

检索并保留首选项文件“name”的内容, 返回SharedReferences,您可以通过它检索和 修改其值仅SharedReferences对象的一个实例 返回给同名的任何呼叫者,这意味着他们将看到 彼此的编辑一旦完成

读取其他应用程序共享首选项文件后,当我尝试创建/更新我的系统而不是编辑我的系统时,使用的是我以前读取的文件。如果相反,我先更新我的应用程序,然后再阅读另一个应用程序——而不是阅读另一个应用程序,被访问的应用程序是我的

有什么想法吗

我用于读取共享pref的代码是[其中packageName是另一个应用程序pckg]:

Context con = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences pref = con.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_WORLD_READABLE);
pref.getBoolean(SHARED_PREF_PROP, false);
我在应用程序shared pref中编写的代码是:

SharedPreferences prefs= getSharedPreferences(SHARED_PREF_NAME, context.MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(SHARED_PREF_PROP, value); 
editor.commit();
提前感谢。

听起来,你有两个完全不同的应用程序,它们的软件包名称不同。这意味着您将创建两个存储在不同文件夹中的同名文件,而不是从一个文件中读取。为了让不同的活动从相同的
SharedReferences
文件中读取,您必须让它们位于
AndroidManifest
文件定义的相同包名下

另一个选项,因为您知道其他应用程序的包名(我假设),是选择将创建它并处理它的主应用程序。然后使用直接URI直接从文件本身读取。由于您正在将权限设置为
模式\u WORLD\u READABLE
,因此系统应允许您执行此操作。但是,它可能会阻止您访问文件夹本身。我个人从未尝试过


您可以使用此代码片段从其他应用程序中读取首选项

String PACKAGE_NAME = "com.gr.iasi";
String PREFERENCE_NAME = "GlobalPrefsJorge";


try {
        myContext = createPackageContext(PACKAGE_NAME,Context.MODE_WORLD_WRITEABLE);             
          SharedPreferences testPrefs = myContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_WORLD_READABLE); 

        Map<String, ?> items = testPrefs .getAll();
        for(String s : items.keySet()){
             //Print keys and values;
            Log.i("***" +s.toString(), items.get(s).toString());
          }

        } catch (NameNotFoundException e) {     
            e.printStackTrace();
        }
String PACKAGE_NAME=“com.gr.iasi”;
字符串首选项\u NAME=“GlobalPrefsJorge”;
试一试{
myContext=createPackageContext(包名称,Context.MODE\u WORLD\u可写);
SharedReferences testPrefs=myContext.getSharedReferences(首选项名称、上下文、模式、世界可读);
Map items=testPrefs.getAll();
对于(字符串s:items.keySet()){
//打印键和值;
Log.i(“***”+s.toString(),items.get(s.toString());
}
}catch(NameNotFoundException){
e、 printStackTrace();
}

是的,有两个不同的应用程序,每个应用程序都有自己的共享首选项文件存储在自己的共享文件夹中。是的,我通过PackageManager知道另一个应用程序的包名,但是我没有选项知道哪个活动/类将处理它。我已经看到了这个链接,这里的问题是访问两个不同的同名共享pref——我自己的和另一个应用程序。打开一个后,当我尝试打开另一个时,引用点指向最初打开的引用点,而不是作为上下文发送的引用点。