android - 共享偏好内容提供者

标签 android sharedpreferences android-contentprovider

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

(我知道无论我做什么,任何已经 root 手机的人都可以使用这些数据)

经过大量搜索,我发现了两种可能的方法。

  1. 将共享首选项模式设置为私有(private)。使用 shareduserid 并使用相同的 key 签署所有应用程序。然后使用原始应用上下文访问私有(private)共享首选项。 Sort of shown here但是非常老,不确定是否仍然可行,因为我无法让它工作。

  2. 使用内容提供者访问共享首选项。- 然而,问题是我找不到关于如何使用共享首选项执行此操作的单个教程。好像大家都用sqlite数据库。我正在努力调整它以使用共享首选项,因为查询功能似乎需要使用游标,而共享首选项不使用游标。

最佳答案

所以我已经解决了!如果其他人发现这很有用..我们开始吧:

我继续研究选项 1(参见问题)并发现满足 2 个条件以允许应用共享资源。

  1. SharedUserID

    在 list 中,我将以下行放在标记下

            android:sharedUserLabel="@string/id"
            android:sharedUserId="com.example"
    

    在字符串 id 中我输入了“samsid”——可以是任何东西,只要它对两个应用程序都是一样的。

  2. 使用相同 key 签名的应用

    Eclipse 在调试您的应用时使用相同的调试器 key ,因此在您将应用发布到 Play 商店之前无需担心这一点。

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

    try {
 otherAppsContext = createPackageContext("com.example.samstest", 0);

        } catch (NameNotFoundException e) {} 

其中“com.example.samstest 是设置共享首选项的应用程序。 然后在制作共享首选项对象时使用“otherAppsContext”,以便以通常的方式检索数据。

关于android - 共享偏好内容提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424917/

相关文章:

java - ANDROID - 如何保存字符串并从任何应用程序访问它

android - 如何在不从 Android 应用程序中的数据库获取数据的情况下创建游标数据?

没有布局的 Android 应用

android - 自定义 Android EditText

flutter - 将shared_preferences添加到flutter应用程序时出现错误

android - 在多进程模式下使用 SharedPreferences

android - 如何实现只读的ContentProvider?

android - 定位服务的 `getLastKnownLocation()` 是否检查手机当前的 GPS 位置?

android - ListView 在另一个 ListView 中

java - Android 与 ArrayList 的共享首选项