我正在開發一個android應用程序。我使用的是Android 2.2的我可以從服務中的共享偏好設置獲取數據嗎?
在我的申請,我捕捉GPS數據並將其發送與1小時的時間間隔來服務。如果用戶退出應用程序,它也在工作(這是必需的)。
我使用2個服務(用戶定義的),一個用於捕獲GPS數據和其他用於發送到服務器。
這裏我懷疑
在服務,我們可以使用共享偏好。
如果我們存儲在應用程序的任何活動中共享偏好的任何數據,我們將能夠使用這些數據服務與共享偏好的幫助?
我正在開發一個android應用程序。我使用的是Android 2.2的我可以從服務中的共享偏好設置獲取數據嗎?
在我的申請,我捕捉GPS數據並將其發送與1小時的時間間隔來服務。如果用戶退出應用程序,它也在工作(這是必需的)。
我使用2個服務(用戶定義的),一個用於捕獲GPS數據和其他用於發送到服務器。
這裏我懷疑
在服務,我們可以使用共享偏好。
如果我們存儲在應用程序的任何活動中共享偏好的任何數據,我們將能夠使用這些數據服務與共享偏好的幫助?
我找到解決方案。
內部,我們調用以下方法來獲取共享偏好
myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE);
在上面的代碼服務的myapp是應用類的一個對象,其從應用
您需要一個上下文才能訪問共享首選項。最好的辦法是創建MyApplication
爲Application
類的子類,實例那裏preferences
和應用程序的其餘部分使用它們作爲MyApplication.preferences
:
public class MyApplication extends Application {
public static SharedPreferences preferences;
@Override
public void onCreate() {
super.onCreate();
preferences = getSharedPreferences(getPackageName() + "_preferences", MODE_PRIVATE);
例如,如果你需要你的喜好訪問其他地方,你可以把這種閱讀喜好:
String str = MyApplication.preferences.getString(KEY, DEFAULT);
或者,你可以調用這個東西保存到首選項:
MyApplication.preferences.edit().putString(KEY, VALUE).commit();
(不要忘了添加或更改的偏好後打電話到commit()
!)
這在技術上的工作,但你爲什麼不只是使用提供'PreferenceManager #getDefaultSharedPreferences(上下文上下文);'靜態方法?這正是它的目的。 – twaddington
@twaddington你應該仔細閱讀。當'context'是** not **可用時,我的答案允許訪問首選項。 – lenik
當然,但他特別要求在「活動」和「服務」中使用共享首選項,這兩者都具有「上下文」可用。 – twaddington
是Shivkumar,你,你正在使用你的活動可以使用任何類型的服務,正常的你的共享偏好。
同樣喜歡
SharedPreferences preferences = getSharedPreferences("<PrefName>",
MODE_PRIVATE);
簡單!同樣,對於getResources,getString等... IntentService類從Context繼承。 –
您可以通過調用PreferenceManager.getDefaultSharedPreferences(Context context)
訪問默認共享偏好的實例,這是在所有Activity
和Service
類共享:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
這是偉大的存儲簡單基元(如布爾值)或可序列化的對象。但是,如果您捕獲了大量的位置數據,則可以考慮使用SQLite數據庫。
此答案與此結合:在服務中的onStart或onStartCommand之前服務中的上下文將不可見:http://stackoverflow.com/questions/7619917/how-to-get-context-in-android-service-class爲我解決了這個問題。 – class
您可以始終傳遞服務的getApplicationContext()方法的結果。 – twaddington
@twaddington因此,如果我們使用'getSharedPreferences(String,Context)',則不會共享首選項? – Sohaib
有衍生兩種方式的SharedPreference
創建實例:
案例1:
SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);
案例2:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
注意,如果您創建具有相同的名稱(案例1)或相同的情況下(情況2)即使在不同地方的偏好,它仍然是相同的,並能共享數據,顯然。
最佳答案在這裏找到http://stackoverflow.com/questions/6446221/get-context-in-a-service?lq=1 –