Android BroadcastReceiver中未定义getPreferences(MODE_PRIVATE)
我有一个带有活动和服务的应用程序,我需要在活动中保存一些值,并在服务中检索 我可以在活动中使用SharedReferences保存该值,但是,当我尝试在BroadcastReceiver中检索该值时,它会说getPreferences未定义服务。Android BroadcastReceiver中未定义getPreferences(MODE_PRIVATE),android,Android,我有一个带有活动和服务的应用程序,我需要在活动中保存一些值,并在服务中检索 我可以在活动中使用SharedReferences保存该值,但是,当我尝试在BroadcastReceiver中检索该值时,它会说getPreferences未定义服务。 我如何在BroadcastReceiver中检索我的值?编辑以反映原始问题从服务更改为BroadcastReceiver 不要在活动中使用getPreferences(int模式),而是使用 getSharedPreferences(String na
我如何在BroadcastReceiver中检索我的值?编辑以反映原始问题从
服务
更改为BroadcastReceiver
不要在活动中使用getPreferences(int模式)
,而是使用
getSharedPreferences(String name, int mode).
getPreferences(int模式)
方法是上述方法的一种方便方法,只需将活动
类名作为名称
参数传递。这意味着它实际上应该只用于给定的活动
,以存储其自身的内部首选项,而不是需要对其他应用程序组件进行全局设置的首选项
在BroadcastReceiver
的情况下,onReceive(…)
方法被传递一个Context
参数,因此您可以使用Context.getSharePreferences(,)
要获取活动保存的共享引用
,还可以让服务在绑定到活动时接收上下文对象。这样,您总是可以引用您的应用程序上下文。如果你有上下文,你就有共享引用。@RyanGray:但正如你所说,这取决于绑定到服务的活动。如果由其他应用程序组件启动服务
,则不会出现这种情况。显然,这取决于应用程序的设计/功能以及各个组件的功能。getPreferences(int模式)
方法只是一个方便的方法,它调用getSharedReferences(字符串名,int模式)
将活动
类名作为名称
参数传递,并暗示该类名只能由活动
用于其自身的内部首选项,而不是应用程序的全局首选项。对不起,我只是编辑了一下,它是BroadcastReceiver,而不是Services。您的广播接收器在哪里?活动中的私人类?还是单独上课?
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();
}
}