1

アプリケーション A、B、C、および D を想像してみてください。すべてのアプリケーションは少量のデータを共有する必要がありますが、それらのいずれかがインストールされるという保証はありません。つまり、B と D のみを使用できます。またはAとCのみなど。

この場合、SharedPreferences を使用できますか?

A が常にインストールされるマスター アプリのような場合、createPackageContext を使用して AD にすべて A のパッケージ スペースを使用させることができることは理解していますが、これらのうちどれがインストールされるかがわからない場合はどうすればよいでしょうか? createPackageContext は、存在しないパッケージ スペースで使用された場合、NameNotFoundException を返します。

この場合、SD カード上のファイル以外にコンテンツ プロバイダーのオプションはありますか?

4

3 に答える 3

2

小さなデータの場合は4つすべてに共有設定を作成し、共有設定を読み取る前にアプリがインストールされているかどうかを確認できます。アプリがインストールされているかどうかを確認する方法は?アプリ間で設定 を共有します。

于 2012-11-02T13:41:57.350 に答える
1

この場合、SharedPreferences を使用できますか?

いいえ。

SharedPreferences を任意の場所に書き込むことはできません。あなたができる最善のことは、常にインストールされている1つの中心的なアプリ(「ローダー」や「メインメニュー」など)を持つことです. その後、他のすべてのアプリは中央アプリの設定スペースを使用して、(createPackageContext を介して) 設定を保存および共有できます。ただし、createPackageContext は、実際にインストールされていないパッケージでは機能しません (たとえば、「com.mystuff.centralstorage」は、任意の名前ではなく、実際にインストールされたパッケージでなければなりません)。

この場合、おそらく最善の解決策は、Java スタイルの SD カード上の共有ファイルです。以下を参照してください: FileInputStream、FileOutputStream、DataInputStream、および DataOutputStream を参照してください。また、SD カードのルートへのパスの Environment.getExternalStorageDirectory.getAbsolutePath (実際、これは、ファイルを処理するために必要な唯一の Android コードです。残りは Java だけでかまいません)。

Android ContentProvider は、個々のアプリを対象としているようです。(上記のように、SharedPerferences を使用して) 共有が許可されていますが、すべてのアプリが独自のプライベートな世界に存在し、それらの間で共有される Android の「サンドボックス」の概念を取り入れているように見えますが、これはここでは望ましくありません。このソリューションには、任意の数のアプリからグローバルにアクセスできるものが必要です。これは、SD カード上の通常の古いファイルです。

(マルチプロセスに適したファイル保護スキームは、考慮すべきもう 1 つのことです。)

于 2012-11-05T17:06:29.613 に答える
0

アプリ間で情報を共有するには、ContentProvider (または複数) を実装できます。または、SDCard 上の共通ファイルを使用します。編集: SharedPreferences はアプリケーション間で共有できるようです。上記の回答を参照してください。

于 2012-11-02T13:30:44.090 に答える