我有一个带有活动和服务的应用程序,我需要在活动中保存一些值并在服务中检索。
我可以在活动中使用 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();
}
}