多くの異なるアプリで使用される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でこれを行うのは明らかに簡単です。