我有一個活動和一個服務的應用程序,我需要在活動中保存一些值並在服務中檢索。getPreferences(MODE_PRIVATE)在BroadcastReceiver中是未定義的
我可以在活動中使用SharedPreferences保存值,但是當我嘗試檢索BroadcastReceiver中的值時,它說getPreferences未定義用於服務。
我怎麼能在BroadcastReceiver中檢索我的值?
我有一個活動和一個服務的應用程序,我需要在活動中保存一些值並在服務中檢索。getPreferences(MODE_PRIVATE)在BroadcastReceiver中是未定義的
我可以在活動中使用SharedPreferences保存值,但是當我嘗試檢索BroadcastReceiver中的值時,它說getPreferences未定義用於服務。
我怎麼能在BroadcastReceiver中檢索我的值?
EDITED反映原始問題從Service
到BroadcastReceiver
的變化。
代替在Activity
使用使用getPreferences(int mode)
的...
getSharedPreferences(String name, int mode).
的getPreferences(int mode)
方法是上述的便捷方法和簡單地將Activity
類名作爲name
參數。這意味着它只能用於給定的Activity
來存儲它自己的內部首選項,而不是其他應用程序組件需要的全局首選項。
在BroadcastReceiver
的onReceive(...)
方法的情況下,通過一個Context
參數,這樣就可以使用context.getSharePreferences(<some_name>, <mode>)
獲得由Activity
保存在SharedPreferences
。
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();
}
}
當您的服務綁定到您的活動時,您也可以讓您的服務收到一個Context對象。這樣你總是有一個對應用程序上下文的引用。如果你有上下文,你有SharedPreferences。 – 2012-08-07 14:24:10
@RyanGray:但正如你所說,這取決於'Activity'被綁定到'Service'。在某些其他應用程序組件啓動「服務」的情況下,情況並非如此。顯然,這歸結於應用程序的設計/功能以及各個組件的功能。 'getPreferences(int mode)'方法只是一個簡便的方法,它調用'getSharedPreferences(String name,int mode)'將'Activity'類名稱作爲'name'參數傳遞,並暗示它只能被一個'Activity '爲了自己的內部喜好,而不是全球的應用。 – Squonk 2012-08-07 14:29:39
對不起,我只是瘋了編輯,它是BroadcastReceiver,而不是服務 – user836026 2012-08-07 14:34:43