Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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_Android Contentprovider - Fatal编程技术网

Android 共享首选项内容提供程序

Android 共享首选项内容提供程序,android,sharedpreferences,android-contentprovider,Android,Sharedpreferences,Android Contentprovider,我在Android应用程序中使用共享首选项来存储一些数据。我希望此数据可用于其他应用程序,但仅限于我制作的应用程序 (我知道,无论我做什么,任何人只要在手机上设置了根目录,都可以使用这些数据) 经过广泛的搜索,我找到了两种可能的方法 将共享优先模式设置为私有。使用shareduserid并使用同一密钥对所有应用程序进行签名。然后使用原始应用程序上下文访问私有共享首选项。 但是非常老,不确定是否仍然可行,因为我无法让它工作 使用内容提供商访问共享首选项。-但是问题是,我找不到一个关于如何使用共享首

我在Android应用程序中使用共享首选项来存储一些数据。我希望此数据可用于其他应用程序,但仅限于我制作的应用程序

(我知道,无论我做什么,任何人只要在手机上设置了根目录,都可以使用这些数据)

经过广泛的搜索,我找到了两种可能的方法

  • 将共享优先模式设置为私有。使用shareduserid并使用同一密钥对所有应用程序进行签名。然后使用原始应用程序上下文访问私有共享首选项。 但是非常老,不确定是否仍然可行,因为我无法让它工作

  • 使用内容提供商访问共享首选项。-但是问题是,我找不到一个关于如何使用共享首选项的教程。每个人似乎都在使用sqlite数据库。我正在努力适应使用共享prefs,因为查询函数似乎需要使用游标,而共享prefs不使用游标


  • 所以我已经解决了!如果有人觉得这有用的话,我们开始:

    我继续研究选项1(见问题),发现允许应用程序共享资源需要满足两个条件

  • SharedUserID

    在清单中,我将以下几行放在标记下面

            android:sharedUserLabel="@string/id"
            android:sharedUserId="com.example"
    
    我在字符串id中输入了“samsid”-可以是任何东西,只要这两个应用程序的id相同

  • 使用相同密钥签名的应用程序

    Eclipse在调试您的应用程序时使用相同的调试器键,所以在您将应用程序放到play store之前,无需担心这一点

  • 要通过上下文访问其他应用程序资源,我使用了以下方法:

        try {
     otherAppsContext = createPackageContext("com.example.samstest", 0);
    
            } catch (NameNotFoundException e) {} 
    
    其中“com.example.samstest”是设置共享pref的应用程序。
    然后在创建共享首选项对象时使用“otherAppsContext”,以便以通常的方式检索数据。

    由于sharedUserId已被弃用并将很快被删除,该解决方案是否仍然可以通过使用相同的密钥对应用程序进行签名来工作?或者现在是否有更好的方法来执行相同的操作?