2014-06-12 47 views
0

在我的應用程序中,我使用getPreferences(Context.MODE_PRIVATE)來獲取用戶設置的首選項。請注意,我在整個項目中使用getPreferences而不是getSharedPreferencesBroadcastReceiver中的GetPreferences

現在我想從BroadcastReceiver獲取首選項,但這裏有問題:它只能使用方法getSharedPreferences。我想用這個我得到一個其他的喜好文件嗎?那麼如何用getSharedPreferences方法得到我的「正常」偏好(我可以通過getPreferences方法得到)?

回答

1

getPreferences()方法應該只在Activity中使用,並且不可能在BroadcastReceiver中使用它。相反,您必須使用getSharedPreferences(String prefKey,int模式)來獲取所有應用程序組件的首選項。看這裏「保存持久狀態」下:

http://developer.android.com/reference/android/app/Activity.html

+0

所以這兩種方法都給了我相同的首選項文件?我認爲這是兩個不同的文件,我無法從彼此訪問它們。因此,如果我使用從'getPreferences'創建的編輯器編寫它們,那麼我寫的所有設置都可以通過'getPreferences'和'getSharedPreferences'訪問? – Cilenco

+0

如果我說的不對,請不要朋克,但如果您使用活動的課程名稱,我認爲是。 getPreferences()傳遞活動的類名作爲首選項名稱。所以,如果你在getSharedPreferences()中使用這個參數, – Opiatefuchs

1

的getPreferences 在這個叫你不要爲自己的喜好通過名字,這並不意味着這個喜好目標是沒有名字的創建。簡單地說,這個調用爲這種方式創建的首選項文件分配一個默認名稱。

而且您總是需要參考一個活動來調用此方法。 ACTIVITY.this.getPreferences(模式)

getSharedPreferences 在這種情況下,您可以通過給它分配一個名稱創建一個首選項文件。

getSharedPreferences(名稱,模式)

解決方案

  1. 要麼使用getSharedPreferences(名稱,模式)整個在您的應用程序

  2. 或設法得到什麼名字的getPreferences(模式)分配給 sharedPreference文件。然後在您的接收器中使用該名稱與 getSharedPreferences(名稱,模式)。

  3. 將可見活動的參考傳遞給接收者。 (這可能容易出現一些問題)