アクティビティとサービスを備えたアプリケーションがあります。アクティビティに値を保存し、サービスで取得する必要があります。
アクティビティでSharedPreferencesを使用して値を保存できますが、BroadcastReceiverで値を取得しようとすると、 getPreferencesがサービスに対して未定義であると表示されます。
BroadcastReceiverで自分の値を取得するにはどうすればよいですか?
アクティビティとサービスを備えたアプリケーションがあります。アクティビティに値を保存し、サービスで取得する必要があります。
アクティビティでSharedPreferencesを使用して値を保存できますが、BroadcastReceiverで値を取得しようとすると、 getPreferencesがサービスに対して未定義であると表示されます。
BroadcastReceiverで自分の値を取得するにはどうすればよいですか?
Service
元の質問のからへの変更を反映するように編集BroadcastReceiver
されました。
getPreferences(int mode)
使用する代わりにActivity
...
getSharedPreferences(String name, int mode).
このgetPreferences(int mode)
メソッドは上記の便利なメソッドであり、単にActivity
クラス名をname
パラメーターとして渡します。これは、Activity
他のアプリコンポーネントに対してグローバルである必要があるプリファレンスではなく、それ自体の内部プリファレンスを格納するために実際に使用する必要があることを意味します。
メソッドの場合BroadcastReceiver
、パラメータonReceive(...)
が渡されるため、を使用して保存されたを取得できます。Context
context.getSharePreferences(<some_name>, <mode>)
SharedPreferences
Activity
public class AndroidWalkthroughApp4 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onResume() {
// get EditText object
EditText editText = (EditText)this.findViewById(R.id.edit_text);
// get preferences object
SharedPreferences prefs = this.getPreferences(MODE_PRIVATE);
// set text to our saved value
editText.setText(String.valueOf(prefs.getInt("chars", 0)));
// don't forget to do this, or your app will crash!
super.onResume();
}
@Override
public void onPause() {
// get EditText object
EditText editText = (EditText)this.findViewById(R.id.edit_text);
// get preferences object
SharedPreferences prefs = this.getPreferences(MODE_PRIVATE);
// create editor from preferences object
SharedPreferences.Editor editor = prefs.edit();
// save and write length of EditText
editor.putInt("chars", editText.getText().length());
editor.commit();
// don't forget this either!
super.onPause();
}
}