2013-05-01 33 views
1

docs狀態:getDefaultSharedPreferences() - 多包應用程序的上下文是什麼?

獲取指向所使用的在給定上下文偏好框架的默認文件SharedPreferences實例。

我的問題是一個環境相關的問題,真的 - 我不是很清楚,如果(在myapp.receivers包)由廣播接收器接收到的情況下,上下文我在一些活動或服務(分別在myapp.activitiesmyapp.services)得到的將委託給相同的SharedPreferences實例。

請注意,behind the scenesgetDefaultSharedPreferences(context)調用getSharedPreferences(context.getPackageName(), MODE_PRIVATE)

順便說一下,也reported是開始從快捷方式的應用程序,而不是菜單提供不同的默認首

回答

0

清單廣播接收器: 清單廣播接收器運行的上下文是android.app.ReceiverRestrictedContext。此上下文啓用了有限的功能,儘管它具有packageName(註冊接收方)。在BroadcastReceiver中使用getDefaultSharedPreferences應該不成問題,因爲檢索默認共享首選項(即包名稱)所需的信息在此受限制的上下文中可用。

動態註冊廣播接收機: 動態註冊廣播接收機在活動的上下文中運行或已註冊接收機中的服務(使用resgisterReceiver註冊)。

我無法找到任何直接的文件提及廣播接收器中上下文的細節,這是我的經驗和試驗的結果。

此外,關於getDefaultSharedPreferences行爲差異的觀察(如果從菜單vs快捷方式啓動的話),我從來沒有遇到過這樣的問題,也無法在網上找到對這些問題的引用。所以,這個問題可能僅限於SDK,設備Mod的特定組合。

+0

我知道'ReceiverRestrictedContext' - 所以在任何情況下,我得到的名稱都是'>'中的名稱。任何鏈接到源,谷歌組等?還有什麼報道[這裏]的差異(http://stackoverflow.com/questions/10786172/android-getdefaultsharedpreferences)? – 2013-05-02 18:27:54

+0

在答案中增加了更多信息 – Sudhee 2013-05-03 10:04:11

+0

我仍然想念一些更正式的鏈接,但現在關閉 – 2013-05-03 11:51:07

1

上下文一個正常的應用程序可以訪問被分配給應用程序,活動,服務和BroadcastReceivers(DID我想念任何?)。從任何上下文中,您可以通過調用getApplicationContext()(安全地調用應用程序上下文)來進入應用程序上下文。

單個應用程序中的程序包對上下文沒有任何影響。我不知道這個鏈接問題是關於什麼的,但getPackageName()基本上給你在清單中定義的包名稱(實際上它返回應用程序的PackageInfo對象中的名稱)。

這似乎是合理的BroadcastReceiver上下文有不同的包名稱(雖然我非常懷疑它)。更重要的是,您仍然可以獲得應用程序上下文,所以只需從任何地方進行操作即可。

相關問題