【问题标题】:shared preferences content provider共享偏好内容提供者
【发布时间】:2014-05-02 09:31:01
【问题描述】:

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

(我知道,无论我做什么,只要手机root 过的人都可以使用这些数据)

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

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

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

【问题讨论】:

    标签: android sharedpreferences android-contentprovider


    【解决方案1】:

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

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

    1. SharedUserID

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

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

      在字符串 id 中,我输入了“samsid”——可以是任何东西,只要两个应用程序相同即可。

    2. 使用相同密钥签名的应用

      Eclipse 在调试您的应用程序时使用相同的调试器密钥,因此在您将应用程序放到 Play 商店之前无需担心这一点。

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

        try {
     otherAppsContext = createPackageContext("com.example.samstest", 0);
    
            } catch (NameNotFoundException e) {} 
    

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

    【讨论】:

    • 由于 sharedUserId 已被弃用并将很快被删除,这个解决方案是否仍然可以通过使用相同的密钥签署应用程序来工作?还是现在有更好的方法来做同样的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多