7

SharedPreferencesAndroid で複数のユーザー プロファイルにアクセスする方法はありますか?

たとえば、UserA がアプリケーションの設定を変更した場合、その変更を UserB も利用できるようにしたいと考えています。パスに書き出されたテキスト ファイルを使用してgetFilesFir()、別のアカウントから読み込もうとしましたが、userA がファイルを書き込むと、userB は利用できません。MODE_PRIVATE私はそれ以降MODE_WORLD_READABLEでファイルを書き、MODE_WORLD_WRITABLE非推奨ですが、それらを使用することが最初から役立つかどうかはわかりません。

すべてのユーザー間で共有できるように、アプリケーション設定の設定を一元化する方法があるかどうか知っている人はいますか? SDカードへの書き込みは避けたいです。

4

4 に答える 4

0

MODE_PRIVATE で getSharedPreferences() を使用するだけで十分です。必要なのは、アプリケーション コンテキストを使用することだけです。そうすれば、現在のユーザーに関係なく、すべてのアクティビティから共有設定を利用できるようになります。

String PREFS_NAME = "com.your_application";
Context context = getApplicationContext();

読み取り設定の例:

SharedPreferences reader;
reader = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
reader.getInt("name1", 3);

書き込み設定の例:

SharedPreferences.Editor writer;
writer = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit();
writer.putString("name2", "string").apply();
于 2016-02-19T09:24:01.150 に答える
0

複数のユーザーがデバイスに追加された場合のルールについて、このドキュメントの [効果] セクションで理解しておくことをお勧めします。あなたが達成しようとしていることが「創造的な回避策」、または単に不可能であることは明らかです。

では、アプリがファイルシステムではないデータを共有するための Android 機能にはどのようなものがあるのでしょうか? 通常のメカニズムはContentProviderですが、アプリのサンドボックス化された 2 つのインスタンスが互いの ContentProvider にアクセスできないのではないかと思います (さらに、それらをどのように区別しますか?)。

ユーザー インスタンス アプリが相互にアクセスできないと仮定しましょう。アクティブなユーザーが誰であるかに関係なく、すべてのアプリから常にアクセスできるシステム レベルの機能を共有できるのではないでしょうか? これを書いているときに思い浮かぶのはDropBoxManager だけです。残念ながら、保存できる量には制限があるため、信頼できる永続性はありません。これらの制限により、データが他のアプリ インスタンスによって読み取られる前に、いつでもキューからプッシュされる可能性があります。また、そこにあるデータは本質的に公開されているため、必要なものではない場合があります。

夢中になりたい場合は、ContentProvider を再訪し、カレンダーや連絡先のシステム レベル プロバイダーを使用してデータを隠しておくことができます。ただし、両方のアプリが秘密の特別なレコードを見つける方法を知っている必要があります。野生のもの。

別の解決策は、すべてのデータをサーバーに保存し、各ユーザーにキーを入力して、サーバー上のデータのブロブを見つけて読み書きできるようにすることです。手動キーでない場合は、「一意の」デバイス プロパティをキーとして使用してみてください。何かが誤ってデータを削除したり公開したりしないという保証がより多くあるため、これはおそらく最良のソリューションです。

于 2016-02-19T06:41:34.700 に答える
0

できません。SD カードのみがユーザー許可を強制しません。

于 2016-02-13T15:45:25.573 に答える