3

多くの異なるアプリで使用されるAndroid用SDKを作成しています。各アプリは、SDKを使用する別のアプリが以前にインストールされているかどうかを知る必要があります。最初のものはランダムなID(Cookie)を作成して保存し、それ以降のすべてのアプリはそれを読み取って再利用する必要があります。Cookieは、デバイスごとに新しく作成されることに注意してください。

私は長い間答えを探してきました。私はさまざまなStackOverflowの回答をたくさん読んだり、ランダムなブログを読んでインターネットを調べたりしたので、回答する前によく読んでください。私はたくさんのことを試しましたが、どれもうまくいきませんでした(リンクを保存します)。

  • ContentProviderは間違いなくやり過ぎです。また、アプリに侵入する必要がありますAndroidManifest.xml。これは私が避けようとしていることです。
  • 同様に、サービスの場合:で定義する必要がAndroidManifest.xmlあります。これは、私が制御しておらず、変更を要求したくないものです。
  • 外部ストレージを使用することもおそらくオプションですが、追加のアクセス許可は必要ありません。
  • アプリは独自の設定にしかアクセスできないため、SharedPreferencesで直接使用することはできません。getSharedPreferences()
  • を使用して、一般的な設定オブジェクトを取得できますcreatePackageContext(package, MODE).getSharedPreferences()。これは、メインパッケージとデータの多くのクライアントがあればうまく機能しますが、実際には、最初にインストールされるアプリのパッケージがわかりません。それらのいずれでもかまいません。検索するパッケージ名のリストすらありません。インストールされていないパッケージ名の受け渡しは失敗します。
  • 上記のアプローチに従って、私は信頼できるいくつかの標準的なAndroidアプリに便乗して、そこに自分の好みを保存しようとしました-たとえば、次のようになります。

    createPackageContext(
        "com.android.browser",
        Context.CONTEXT_RESTRICTED)
        .getSharedPreferences(
            "GLOBAL_PREFS",
            Context.MODE_WORLD_READABLE);
    

    しかし、それは機能しません:エラーは読み取ります

    Couldn't create directory for SharedPreferences file
      /data/data/com.android.browser/shared_prefs/GLOBAL_PREFS.xml
    

つまり、要約すると、他のアプリがそこに移動して、存在する場合はそれを読み取ることができるように、データの一部(短い文字列)を標準の場所に保存する必要があります。または任意のAndroidManifest.xml権限を要求します。

おそらく完璧な答えはないので、おそらく最善の解決策は外部ストレージに書き込むことです。それならそうです。状況を説明するために、安全なデータを保存するように設計されたキーチェーンを使用してiOSでこれを行うのは明らかに簡単です。

4

1 に答える 1

2

残念ながら、私が知っているこれに対する素晴らしい答えは本当にありません。あなたはあなたのオプションのかなり良い概要を思いついた、そして最良の方法はおそらく外部ストレージを使うことかもしれない。

何かを捨てるために、固定名と誰でも読み取り可能な(そしておそらく書き込み可能な)権限を持つフラットファイルを使用できる可能性があると思います。次に、すべてのアプリケーションのディレクトリを反復処理し、各フォルダでこの既知の名前のファイルを確認して、それを開こうとする必要があります。

これは理論的には機能する可能性がありますが、「Cookie」を含むアプリがアンインストールされる場合を考えてみてください。その後、Cookieがなくなります。以前のCookieの値を新しいCookieにコピーして、すべてのアプリでCookieを作成することをお勧めします。

私は実際にこれを試したことがありませんが、うまくいくはずだと思います。

于 2012-11-07T02:02:50.813 に答える