在BroadcastReceiver中未定义getPreferences(MODE_PRIVATE)

时间:2012-08-07 14:14:34

标签: android

我有活动和服务的应用程序,我需要在活动中保存一些值并在服务中检索。

我可以使用活动中的SharedPreferences保存值,但是,当我尝试检索BroadcastReceiver中的值时,它表示 getPreferences未定义服务。

如何在BroadcastReceiver中检索我的值?

2 个答案:

答案 0 :(得分:10)

已编辑以反映原始问题从ServiceBroadcastReceiver的更改。

而不是在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 {1}}。

答案 1 :(得分:0)

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();
    }
}