1

ドキュメントには次のように記載されています。

指定されたコンテキストで設定フレームワークによって使用される既定のファイルを指す SharedPreferences インスタンスを取得します。

私の質問は、本当にコンテキスト関連の質問です-BroadcastReceiver(myapp.receiversパッケージ内)によって受信されたコンテキスト、アクティビティまたはサービス(myapp.activitiesおよびmyapp.servicesそれぞれ)で取得したコンテキストが同じSharedPreferencesインスタンスに委任されるかどうかはよくわかりません。

舞台裏 getDefaultSharedPreferences(context)で が呼び出されることに注意してくださいgetSharedPreferences(context.getPackageName(), MODE_PRIVATE)

ところで、メニューではなくショートカットからアプリを起動すると、デフォルトの設定が異なることも報告されています

4

2 に答える 2

1

通常のアプリがアクセスできるコンテキストは、Applications、Activities、Services、および BroadcastReceivers に割り当てられます (見落としていませんか?)。任意のコンテキストから、呼び出してアプリケーション コンテキストに移動できますgetApplicationContext()(アプリケーション コンテキストでも安全に呼び出すことができます)。

1 つのアプリ内のパッケージは、コンテキストに影響を与えません。そのリンクされた質問が何であるかはわかりませんが、getPackageName()基本的にマニフェストで定義されたパッケージ名を提供します(実際、アプリのPackageInfoオブジェクトで名前を返します)。

BroadcastReceiver Context が異なるパッケージ名を持っていることはもっともらしいです (私はそれを強く疑っていますが)。さらに重要なことは、アプリケーションのコンテキストを引き続き取得できるため、どこからでも取得できることです。

于 2013-05-01T22:47:24.807 に答える
0

マニフェスト ブロードキャスト レシーバー: マニフェスト ブロードキャストレシーバー が実行されるコンテキストはandroid.app.ReceiverRestrictedContext. このコンテキストでは、有効な機能が制限されていますが、packageName (レシーバーを登録した) はあります。BroadcastReceiver で getDefaultSharedPreferences を使用しても問題はありません。デフォルトの共有設定 (パッケージ名など) を取得するために必要な情報は、この制限されたコンテキストで利用できるためです。

動的に登録されたブロードキャスト レシーバー: 動的に登録されたブロードキャスト レシーバー ( を使用しresgisterReceiverて登録) は、レシーバーを登録したアクティビティまたはサービスのコンテキストで実行されます。

ブロードキャスト レシーバーのコンテキストの詳細について言及している直接的なドキュメントは見つかりませんでした。これは私の経験と試行の結果です。

また、メニューとショートカットから起動した場合の getDefaultSharedPreferences の動作の違いに関する観察に関して、私はそのような問題に直面したことはなく、ネット上でそのような問題への参照を見つけることもできませんでした。そのため、この問題は SDK、デバイス、Mod の特定の組み合わせに限定されている可能性があります。

于 2013-05-02T16:50:51.693 に答える