4

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

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

如何在 BroadcastReceiver 中检索我的值?

4

2 回答 2

10

编辑以反映原始问题从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.

于 2012-08-07T14:22:37.920 回答
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();
    }
}
于 2015-05-17T09:23:09.310 回答