2012-08-07 94 views

回答

10

EDITED反映原始問題從ServiceBroadcastReceiver的變化。

代替在Activity使用使用getPreferences(int mode)的...

getSharedPreferences(String name, int mode). 

getPreferences(int mode)方法是上述的便捷方法和簡單地將Activity類名作爲name參數。這意味着它只能用於給定的Activity來存儲它自己的內部首選項,而不是其他應用程序組件需要的全局首選項。

BroadcastReceiveronReceive(...)方法的情況下,通過一個Context參數,這樣就可以使用context.getSharePreferences(<some_name>, <mode>)獲得由Activity保存在SharedPreferences

+1

當您的服務綁定到您的活動時,您也可以讓您的服務收到一個Context對象。這樣你總是有一個對應用程序上下文的引用。如果你有上下文,你有SharedPreferences。 – 2012-08-07 14:24:10

+1

@RyanGray:但正如你所說,這取決於'Activity'被綁定到'Service'。在某些其他應用程序組件啓動「服務」的情況下,情況並非如此。顯然,這歸結於應用程序的設計/功能以及各個組件的功能。 'getPreferences(int mode)'方法只是一個簡便的方法,它調用'getSharedPreferences(String name,int mode)'將'Activity'類名稱作爲'name'參數傳遞,並暗示它只能被一個'Activity '爲了自己的內部喜好,而不是全球的應用。 – Squonk 2012-08-07 14:29:39

+0

對不起,我只是瘋了編輯,它是BroadcastReceiver,而不是服務 – user836026 2012-08-07 14:34:43

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