android語言切換廣播
1. Google I/O 2016 上發布的 Android N 有哪些新特性
1.多窗口支持
在 Android N 中,我們為該平台引入了一個新的而且非常需要的多任務處理功能 — 多窗口支持。
現在,用戶可以一次在屏幕上打開兩個APP。
在運行 Android N 的手機和平板電腦上,用戶可以並排運行兩個APP,或者處於分屏模式時一個APP位於另一個APP之上。用戶可以通過拖動兩個APP之間的分隔線來調整APP。
在 Android TV 設備上,APP可以將自身置於畫中畫面模式,從而讓它們可以在用戶瀏覽或與其他APP交互時繼續顯示內容。如需了解詳細信息,請參閱下文。
多窗口支持為您提供新的吸引用戶方式,特別是在平板電腦和其他更大屏幕的設備上。您甚至可以在您的APP中啟用拖放,從而使用戶可以方便地將內容拖放到您的應用或從其中拖出內容—這是一個非常好的增強用戶體驗的方式。
向您的APP添加多窗口支持並配置多窗口顯示的處理方式非常簡單。例如,您可以指定您的 Activity 允許的最小尺寸,從而防止用戶將 Activity 調整到該尺寸以下。您還可以為APP禁用多窗口顯示,這可確保系統將僅以全屏模式顯示APP。
如需了解詳細信息,請參閱多窗口支持開發者文檔。
2.Notification 增強功能
在 Android N 中,我們重新設計了Notification,使其更易於使用並且速度更快。部分變更包括:
- 模板更新:我們正在更新Notification模板,新強調了圖片跟頭像。開發者將能夠充分利用新模板,只需進行少量的代碼調整。
- 綁定的Notification:系統可以將消息組合在一起(例如,按消息主題)並顯示組。用戶可以適當地進行 Dismiss 或 Archive 等操作。如果您已實現 Android Wear 的通知,那麼您已經很熟悉此模型。
- 直接回復:對於實時通信應用,Android 系統支持內聯回復,以便用戶可以直接在通知界面中快速回復簡訊。
- 自定義視圖:兩個新的 API 讓您在通知中使用自定義視圖時可以充分利用系統的風格,如Notification標題和操作。
如需了解如何實現新功能的信息,請參閱通知指南。
2.配置文件指導的 JIT/AOT 編譯
在 Android N 中,我們添加了 Just in Time (JIT) 編譯器,對 ART 進行代碼分析,讓它可以在應用運行時持續提升 Android 應用的性能。JIT 編譯器對 Android 運行組件當前的 Ahead of Time (AOT) 編譯器進行了補充,有助於提升運行時性能,節省存儲空間,加快應用更新和系統更新速度。
配置文件指導的編譯讓 Android 運行組件能夠根據應用的實際使用以及設備上的情況管理每個應用的 AOT/JIT 編譯。例如,Android 運行組件維護每個應用的熱方法的配置文件,並且可以預編譯和緩存這些方法以實現最佳性能。對於應用的其他部分,在實際使用之前不會進行編譯。
除提升應用的關鍵部分的性能外,配置文件指導的編譯還有助於減少整個 RAM 佔用,包括關聯的二進制文件。此功能對於低內存設備非常尤其重要。
Android 運行組件在管理配置文件指導的編譯時,可最大程度降低對設備電池的影響。僅當設備處於空閑狀態和充電時才進行編譯,從而可以通過提前執行該工作節約時間和省電。
3.快速的應用安裝路徑
Android 運行組件的 JIT 編譯器最實際的好處之一是應用安裝和系統更新的速度。即使在 Android 6.0 中需要幾分鍾進行優化和安裝的大型應用,現在只需幾秒鍾就可以完成安裝。系統更新也變得更快,因為省去了優化步驟。
4.瞌睡模式
Android 6.0 推出了瞌睡模式,即設備處於空閑狀態時,通過推遲應用的 CPU 和網路活動以實現省電目的的系統模式,例如,設備放在桌上或抽屜里時。
現在,在 Android N 中,瞌睡模式又前進了一步,在外出時也可以省電。只要屏幕關閉了一段時間,且設備未插入電源,瞌睡模式就會對應用使用熟悉的 CPU 和網路限制。這意味著用戶即使將設備放入口袋裡也可以省電。
屏幕關閉片刻後,設備在使用電池時,瞌睡模式將限制網路訪問,同時延遲作業和同步。在短暫的維護時間范圍後,其允許應用訪問網路,並執行延遲的作業/同步。打開屏幕或將設備插入電源會使設備退出瞌睡模式。
當設備再次處於靜止狀態時,屏幕關閉且使用電池一段時間,瞌睡模式針對 PowerManager.WakeLock,AlarmManager 警報和 GPS/Wi-Fi 掃描應用完整 CPU 和網路限制。
無論設備是否處於運動狀態,將應用調整到瞌睡模式的最佳做法均相同,因此,如果您已更新應用以妥善處理瞌睡模式,則一切就緒。如果不是,請立即開始將應用調整到瞌睡模式。
5.Project Svelte:後台優化
Project Svelte 在持續改善,以最大程度減少生態系統中一系列 Android 設備中系統和應用使用的 RAM。在 Android N 中,Project Svelte 注重優化在後台中運行應用的方式。
後台處理是大多數應用的一個重要部分。處理得當,可讓您實現非常棒的用戶體驗 — 即時、快速和情境感知。如果處理不得當,後台處理會毫無必要地消耗 RAM(和電池),同時影響其他應用的系統性能。
自 Android 5.0 發布以來,JobScheler 已成為執行後台工作的首選方式,其工作方式有利於用戶。應用可以在安排作業的同時允許系統基於內存、電源和連接情況進行優化。JobScheler 可實現控制和簡潔性,我們想要所有應用都使用它。
另一個非常好的選擇是 GCMNetworkManager(Google Play 服務的一部分),其在舊版 Android 中提供類似的作業安排和兼容性。
我們在繼續擴展 JobScheler 和 GCMNetworkManager,以符合多個用例 — 例如,在 Android N 中,現在,您可以基於內容提供程序中的更改安排後台工作。同時,我們開始棄用一些較舊的模式,這些模式會降低系統性能,特別是低內存設備的系統性能。
在 Android N 中,我們刪除了三個常用隱式廣播 — CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO — 因為這些廣播可能會一次喚醒多個應用的後台進程,同時會耗盡內存和電池。如果您的應用收到這些廣播,請充分利用 N Developer Preview 以遷移到 JobScheler 和相關的 API。
如需了解詳情,請查看後台優化文檔。
6.Data Saver
在移動設備的整個生命周期,蜂窩數據計劃的成本通常會超出設備本身的成本。對於許多用戶而言,蜂窩數據是他們想要節省的昂貴資源。
Android N 推出了 Data Saver 模式,這是一項新的系統服務,有助於減少應用使用的蜂窩數據,無論是在漫遊,賬單周期即將結束,還是使用少量的預付費數據包。Data Saver 讓用戶可以控制應用使用蜂窩數據的方式,同時讓開發者打開 Data Saver 時可以提供更多有效的服務。
用戶在 Settings 中啟用 Data Saver 且設備位於按流量計費的網路上時,系統屏蔽後台數據使用,同時指示應用在前台盡可能使用較少的數據 — 例如,通過限制用於流媒體服務的比特率、降低圖片質量、延遲最佳的預緩沖等方法來實現。用戶可以將特定應用加入白名單以允許後台按流量的數據使用,即使在打開 Data Saver 時也是如此。
Android N 繼承了 ConnectivityManager,以便為應用檢索用戶的 Data Saver 首選項並監控首選項變更提供一種方式。所有應用均應檢查用戶是否已啟用 Data Saver 並努力限制前台和後台數據的使用。
7.快速設置Tile API
「快速設置」通常用於直接從通知欄顯示關鍵設置和操作,非常簡單。在 Android N 中,我們已擴展「快速設置」的范圍,使其更加有用更方便。
我們為額外的「快速設置」Tile添加了更多空間,用戶可以通過向左或向右滑動跨分頁的顯示區域訪問它們。我們還讓用戶可以控制顯示哪些「快速設置」Tile以及顯示的位置 — 用戶可以通過拖放Tile來添加或移動Tile。
對於開發者,Android N 還添加了一個新的 API,從而讓您可以定義自己的「快速設置」Tile,使用戶可以輕松訪問您應用中的關鍵控制項和操作。
對於急需或頻繁使用的控制項和操作,保留「快速設置」Tile,且不應將其用作啟動應用的快捷方式。
定義Tile後,您可以將它們顯示給用戶,用戶可通過拖放將Tile添加到「快速設置」。
如需創建應用Tile的更多信息,請參閱可下載的 API 參考中的 android.service.quicksettings.Tile。
8.號碼屏蔽
Android N 現在支持在平台中進行號碼屏蔽,提供框架 API,讓服務提供商可以維護屏蔽的號碼列表。默認簡訊應用、默認手機應用和提供商應用可以對屏蔽的號碼列表進行讀取和寫入操作。其他應用則無法訪問此列表。
通過使號碼屏蔽成為平台的標准功能,Android 為應用提供一致的方式來支持廣泛的設備上的號碼屏蔽。應用可以利用的其他優勢包括:
- 還會屏蔽已屏蔽的來電號碼發出的簡訊
- 通過 Backup & Restore(備份和還原)功能可以跨重置和設備保留屏蔽的號碼
- 多個應用可以使用相同的屏蔽號碼列表
此外,通過 Android 的運營商應用集成表示運營商可以讀取設備上屏蔽的號碼列表,並為用戶執行服務端屏蔽,以阻止不需要的來電和簡訊通過任何介質(如 VOIP 端點或轉接電話)到達用戶。
如需了解詳細信息,請參閱可下載的 API 參考中的 android.provider.BlockedNumberContract。
9.來電過濾
Android N 允許默認的手機應用過濾來電。手機應用執行此操作的方式是實現新的 CallScreeningService,該方法允許手機應用基於來電的 Call.Details 執行大量操作,例如:
- 拒絕來電
- 不允許來電到達呼叫日誌
- 不向用戶顯示來電通知
如需了解詳細信息,請參閱可下載的 API 參考中的 android.telecom.CallScreeningService。
10.多區域設置支持、多語言
Android N 現在允許用戶在設置中選擇多個區域設置,以更好地支持雙語用例。應用可以使用新的 API 獲取用戶選擇的區域設置,然後為多區域設置用戶提供更成熟的用戶體驗 — 如以多個語言顯示搜索結果,並且不會以用戶了解的語言翻譯網頁。
除多區域設置支持外,Android N 還擴展了用戶可用的語言范圍。它針對常用語言提供超過 25 種的變體,如英語、西班牙語、法語和阿拉伯語。它還針對 100 多種新語言添加了部分支持。
應用可以通過調用 LocaleList.GetDefault() 獲取用戶設置的區域設置列表。為支持擴展的區域設置數量,Android N 正在改變其解析資源的方式。請務必使用新的資源解析邏輯測試和驗證您的應用是否能如期運行。
如需有關新資源解析行為和應遵循的最佳做法的更多信息,請參閱多語言支持。
11.Android 中的 ICU4J API
Android N 目前在 Android 框架(位於 android.icu 軟體包下)中提供 ICU4J API 的子集。遷移很簡單,主要是需要從 com.java.icu 命名空間更改為 android.icu。如果您已在您的應用中使用 ICU4J 捆綁包,切換到 Android 框架中提供的 android.icu API 可以大量節省 APK 大小。
如果要了解有關 Android ICU4J API 的更多信息,請參閱 ICU4J 支持。
12.OpenGL™ ES 3.2 API
Android N 添加了框架介面和對 OpenGL ES 3.2 的平台支持,包括:
- 來自 Android 擴展包 (AEP) 的所有擴展(EXT_texture_sRGB_decode 除外)。
- 針對 HDR 的浮點幀緩沖和延遲著色。
- BaseVertex 繪圖調用可實現更好的批處理和流媒體服務。
- 強大的緩沖區訪問控制可減少 WebGL 開銷。
Android N 上適用於 OpenGL ES 3.2 的框架 API 與 GLES32 類一起提供。使用 OpenGL ES 3.2 時,請務必通過 標記和 android:glEsVersion 屬性在您的清單文件中聲明要求。
如需了解有關使用 OpenGL ES 的信息,包括如何在運行時檢查設備支持的 OpenGL ES 版本,請參閱 OpenGL ES API 指南。
13.Android TV 錄制
Android N 通過新的錄制 API 添加了從 Android TV 輸入服務錄制和播放內容的功能。構建在現有時移 API 之上,TV 輸入服務可以控制能夠錄制的渠道數據、保存錄制的會話的方式,同時可通過錄制的內容管理用戶交互。
如需了解詳細信息,請參閱 Android TV 錄制 API。
14.Android for Work
Android for Work 針對運行 Android N 的設備添加了許多新功能和 API。部分重要內容如下— 有關與 Android N 相關的 Android for Work 更新的完整列表,請參閱 Android for Work 變更。
15.關閉工作
在具有託管配置文件的設備上,用戶可以切換工作模式。工作模式關閉時,管理的用戶臨時關閉,其禁用託管配置文件應用、後台同步和通知。這包括配置文件所有者應用。關閉工作模式時,系統顯示永久狀態圖標,以提醒用戶他們無法啟動工作應用。啟動器指示該工作應用和小組件無法訪問。
16.Always on VPN
設備所有者和配置文件所有者可以確保工作應用始終通過指定的 VPN 連接。系統在設備啟動後自動啟動該 VPN。
新的 DevicePolicyManager 方法為 setAlwaysOnVpnPackage() 和 getAlwaysOnVpnPackage()。
由於 VPN 服務無需應用交互即可由系統直接綁定,因此,VPN 客戶端必須針對 Always on VPN 處理新的入口點。和以前一樣,由與操作匹配的 Intent 過濾器將服務指示給系統。android.net.VpnService。
用戶還可以使用 Settings>More>Vpn 在主要用戶中手動設置實現 VPNService 方法的 Always on VPN 客戶端。
17.輔助工具增強功能
Android N 現在針對新的設備設置直接在歡迎屏幕上提供「Vision Settings」。這使用戶可以更容易發現和配置他們設備上的輔助工具功能,包括放大手勢、字體大小、顯示屏尺寸和 TalkBack。
隨著這些輔助工具功能更為突出,在啟用這些功能後,您的用戶更可能試用您的應用。請務必提前啟用這些設置測試您的應用。您可以通過 Settings > Accessibility 啟用它們。
還是在 Android N 中,輔助工具服務現在可以幫助具有動作障礙的用戶觸摸屏幕。全新的 API 允許使用人臉追蹤、眼球追蹤、點掃描等功能構建服務,以滿足這些用戶的需求。
如需了解詳細信息,請參閱可下載的 API 參考 中的 android.accessibilityservice.GestureDescription
18.直接啟動
直接啟動可以縮短設備啟動時間,讓注冊的應用具有有限的功能,即使在意外重啟後。例如,如果當用戶睡覺時加密的設備重啟,那麼注冊的警報、消息和來電現在可以和往常一樣繼續通知用戶。這也意味著重啟後輔助工具服務會立即可用。
在 Android N 中,直接啟動充分利用基於文件的加密,以針對系統和應用數據啟用細化的加密策略。為系統和應用數據。系統針對選定的系統數據和顯式注冊的應用數據使用設備加密的存儲。默認情況下,憑據加密的存儲可用於所有其他系統數據、用戶數據、應用及應用數據。
啟動時,系統在受限的模式中啟動,僅訪問設備加密的數據,不會對應用或數據進行常規訪問。如果您有想要在此模式下運行的組件,您可以通過在清單文件中設置標記注冊它們。重啟後,系統通過廣播 LOCKED_BOOT_COMPLETED Intent 激活注冊的組件。系統確保注冊的設備加密的應用數據在解鎖前可用。所有其他數據在用戶確認鎖定屏幕憑據進行解密前均不可用。
如需了解詳細信息,請參閱直接啟動。
19.密鑰認證
使用硬體支持的密鑰庫,可更安全地在 Android 設備上創建、存儲和使用加密密鑰。它們可保護密鑰免受 Linux 內核、潛在的 Android 漏洞的攻擊,也可防止從已取得 root 許可權的設備提取密鑰。
為了讓硬體支持的密鑰庫使用起來更簡單和更安全,Android N 引入了密鑰認證。應用和關閉的設備可使用密鑰認證以堅決地確定 RSA 或 EC 密鑰對是否受硬體支持、密鑰對的屬性如何,以及其使用和有效性有何限制。
應用和關閉的設備服務可以通過 X.509 認證證書(必須由有效的認證密鑰簽署)請求有關密鑰對的信息。認證密鑰是一個 ECDSA 簽署密鑰,其在出廠時被注入設備的硬體支持的密鑰庫。因此,有效的認證密鑰簽署的認證證書可確認硬體支持的密鑰庫是否存在,以及該密鑰庫中密鑰對的詳細信息。
為確保設備使用安全的官方 Android 出廠映像,密鑰認證要求設備 bootloader 向可信執行環境 (TEE) 提供以下信息:
設備上安裝的操作系統版本和補丁級別
驗證的啟動公鑰和鎖定狀態。
如需了解有關硬體支持的密鑰庫功能的詳細信息,請參閱硬體支持的密鑰庫指南。
除密鑰認證外,Android N 還推出了指紋綁定密鑰,在指紋注冊時不會撤銷。
20.網路安全性配置
在 Android N 中,通過使用說明性網路安全性配置(而不是使用傳統的易出錯的編程 API(例如,X509TrustManager)),應用可以安全地自定義其安全(HTTPS、TLS)連接的行為,無需任何代碼修改。
支持的功能:
自定義信任錨。讓應用可以針對其安全連接自定義哪些證書頒發機構 (CA) 受信任。例如,信任特定的自簽署證書或受限的公共 CA 集。
僅調試重寫。讓應用開發者可以安全調試其應用的安全連接,而不會增加安裝基礎的風險。
明文流量退出。讓應用可以防止自身意外使用明文流量。
固定證書。這是一項高級功能,讓應用可以針對安全連接限制哪些伺服器密鑰受信任。
如需了解詳細信息,請參閱網路安全性配置。
2. android 怎麼實現應用多語言切換
添加多語言文件
在不同的 value 文件夾下(例如 value 、value-en、values-zh-rTW 文件夾)添加不同語言的 string.xml 文件,我們的項目添加了英文、簡體中文、繁體中文三種語言,如下圖所示:
Project模式:
Android模式:
其中英文需要翻譯,繁體如果沒有專門翻譯的話,可以找個簡繁轉換網站,直接將簡體中文轉成繁體中文,推薦一個網站:
http://www.vifo.com.cn/fanti/
下面我只講解簡體中文和英文的做法;
2.現在我們可以在activity啟動裡面(onCreate()或者onResume())獲取系統的語言:
Locale locale = Locale.getDefault();
String language = locale.getLanguage();1212
language就是我們從系統拿到的語言,這里如果是中文,拿到的是「zh」,如果是英文是「cn」;
3.拿到了系統語言,那麼我們就要通過系統語言的判斷改變我們app對應的系統語言:
protected void showLanguage(String language) {
//設置應用語言類型
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
if (language.equals("zh")) {
config.locale = Locale.SIMPLIFIED_CHINESE;
} else {
config.locale = Locale.ENGLISH;
}
resources.updateConfiguration(config, dm);
//保存設置語言的類型(這個裡面我先保存一下,下面會講到他的用處)
PreferenceUtil.commitString("language", language);
}
這樣子,如果你的手機開始的時候系統是中文,那麼你的app就是中文,如果開始的時候系統是英文,那麼你的app就是英文,這個只是適用開始的時候語言就已經設定好了,但是如果你現在的app用的是中文,app沒有退出的情況下,直接去把系統設置成英文,那麼你返回到你的app的時候並不會是英文,依然是中文,必須在程序退出之後,再進來的時候才會成為英文,這樣子的體驗一點都不好,那麼我們怎麼樣才能做到你改系統語言,我的app就跟著去改變呢,所謂的動態改變。那麼我們可以這樣子做。
@Override
protected void onResume() {
super.onResume();
String LAN = PreferenceUtil.getString("language","");
Locale locale = Locale.getDefault();
String language = locale.getLanguage();
Log.i("語言————————",language);
if(!language.equals("")){
if(!LAN.equals(language)){
freshView();//重新啟動MainActivity
}
}
showLanguage(language);
}
private void freshView(){
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}2223
首先PreferenceUtil這個是我自己寫的工具類,就是SharedPreferences存儲,在onResume()裡面,重要的就是做個判斷,拿到的language是不是和之前保存系統的language一樣,如果不一樣,重新啟動MainActivity,這樣子就做到了重新獲取系統language。
3. 安卓手機怎麼語言轉換
手機語言切換的步驟如下:
1、選擇手機菜單中的「設置 (Settings)」選項。
2、選擇設置菜單中的「語言和鍵盤 (Language和 keyboard) 」選項。
4. android應用內怎麼設置語言切換
1.在工程res文件下添加對應語種的values文件,ar:阿拉伯語, en:英語 zh_rCN: 簡體中文
截圖如下:
2 .在功能清單文件中對要進行切換acitivity 進行配置添加
android:configChanges="locale"
3.對語言選擇的處理
public class MainActivity extends Activity {
Context context = MainActivity.this;;
int languageId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
read();//設置
setContentView(R.layout.main);
findViewById(R.id.btn_change).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
save();
}
});
}
//保存
private void save() {
String[] languages = { "默認", "CN", "EN" };
AlertDialog.Builder builder = new AlertDialog.Builder(context,
android.R.style.Animation_Dialog);
builder.setTitle("選擇語言");
final SharedPreferences languagePre = context.getSharedPreferences(
"language_choice", context.MODE_PRIVATE);
final int id = languagePre.getInt("id", 0);
builder.setSingleChoiceItems(languages, id,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int index) {
switch (index) {
case 0:
// 系統默認語言
languageId = 0;
break;
case 1:
// 簡體中文
languageId = 1;
break;
case 2:
// 英語
languageId = 2;
break;
case 3:
// 阿拉伯語
languageId = 3;
break;
default:
break;
}
languagePre.edit().putInt("id", languageId).commit();
}
});
// 保存
builder.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((Activity) context).finish();
Intent intent = new Intent();
intent.setClass(context, MainActivity.class);
context.startActivity(intent);
}
});
builder.show();
}
//讀取
private void read() {
SharedPreferences languagePre = getSharedPreferences("language_choice",
Context.MODE_PRIVATE);
int id = languagePre.getInt("id", 0);
Log.d("MainActivity", "langauge_id=" + id);
Toast.makeText(context, "langauge_id=" + id, Toast.LENGTH_LONG).show();
// 應用內配置語言
Resources resources = getResources();// 獲得res資源對象
Configuration config = resources.getConfiguration();// 獲得設置對象
DisplayMetrics dm = resources.getDisplayMetrics();// 獲得屏幕參數:主要是解析度,像素等。
switch (id) {
case 0:
config.locale = Locale.getDefault(); // 系統默認語言
break;
case 1:
config.locale = Locale.SIMPLIFIED_CHINESE; // 簡體中文
break;
case 2:
config.locale = Locale.ENGLISH; // 英文
break;
default:
config.locale = Locale.getDefault();
break;
}
resources.updateConfiguration(config, dm);
}
}
5. android廣播里怎麼實現Intent頁面跳轉 廣播接收到信息就跳轉
Android廣播機制指的是,在一個應用程序運行的時候可以自定義一個消息類型,讓相應的接收器去處理這個消息或者是系統消息,比如來電話了、來簡訊了、手機沒電了等等系統發送的消息。系統發送的消息也可以通過廣播的方式通知給應用程序,這樣子就避免了新開一個Thread去監聽系統或其他應用發送過來的消息的狀態。
Android廣播的分類:
1、 普通廣播:這種廣播可以依次傳遞給各個處理器去處理
2、 有序廣播:這種廣播在處理器端的處理順序是按照處理器的不同優先順序來區分的,高優先順序的處理器會優先截獲這個消息,並且可以將這個消息刪除
3、 粘性消息:粘性消息在發送後就一直存在於系統的消息容器裡面,等待對應的處理器去處理,如果暫時沒有處理器處理這個消息則一直在消息容器裡面處於等待狀態。
注意:普通廣播和粘性消息不同被截獲,而有序廣播是可以被截獲的
處理器的注冊:
1、 在代碼中用函數代碼動態的方式注冊。動態注冊的處理器必須用代碼動態的銷毀,每次用來處理消息的就一個實例對象
2、 在配置文件裡面靜態注冊,靜態注冊有個特點,那就是一旦注冊就會一直存在於系統裡面,無論應用是否關閉或開關機。(簡直就是一個流氓軟體病毒啊~)。靜態注冊每次有處理消息就由系統new一個處理器處理,並銷毀
下面具體看看Android廣播消息的發送、注冊、處理過程:
① 自定義處理器類:
public class MyBroadcastReceiver4 extends BroadcastReceiver {
public MyBroadcastReceiver4() {
System.out.println("創建了一個由registerReceiver()注冊的廣播接收器");
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
System.out.println("MyBroadcastReceiver4收到了一個" + action + "消息");
if (isOrderedBroadcast()) {
System.out.println("這是一個有序廣播,已經被攔截了。");
this.abortBroadcast();
} else {
System.out.println("這不是一個有序廣播");
}
Bundle bundle = intent.getExtras();
if (bundle != null) {
System.out.println("該消息攜帶的數據如下:");
// 獲得bundle的一個key的集合
Set set = bundle.keySet();
// 獲得上述集合的迭代器
Iterator iterator = set.iterator();
// 用迭代器遍歷集合
while (iterator.hasNext()) {
// 取得集合中的一個內容
String str = (String) iterator.next();
// 取得Bundle中的內容
System.out.println(str + "--->" + bundle.get(str));
}
} else {
System.out.println("該消息沒有攜帶數據");
}
Toast toast = Toast.makeText(context, "MyBroadcastReceiver4收到了一個"
+ action + "消息", Toast.LENGTH_LONG);
toast.show();
//將這個消息截獲(從消息容器移除)這樣其他處理器就沒法接收到這個消息
this.abortBroadcast();
}
}
而界面的轉跳
Intent intent = new Intent(context,目標Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent );
提示: context 是在廣播接收者的
public void onReceive(Context context, Intent intent) 方法中獲取的
6. 如何實現Android切換系統語言功能
如果想獲取手機的當前系統語言,可以通過Locale類獲取,主要方法:Locale.getDefault().getLanguage(),返回的是es或者zh;通過Locale.getDefault().getCountry()獲取當前國家或地區,返回為CN或US;如果當前手機設置為中文-中國,則使用此方法返回zh-CN,同理可得到其他語言與地區的信息。 查看原帖>>
7. android 語言切換問題
看看是不是代碼里寫死的,檢查string文件檢查value設置
8. 下載了中英雙語的電影,用安卓手機怎麼調語言就像VCD,可以調左聲道和右聲道來換語言的。安卓手機能
手機語言切換的步驟如下:
1、選擇手機菜單中的「設置 (Settings)」選項。
2、選擇設置菜單中的「語言和鍵盤 (Language和 keyboard) 」選項。