Android學習筆記(五)廣播(Broadcast)
5. 廣播
5.1 廣播
Android中的廣播主要分為兩種型別:標準廣播和有序廣播。 標準廣播: 是一種完全非同步執行的廣播,廣播發出後,所有的廣播接收器都會在同一時間內接受這條廣播資訊,無先後順序,效率較高,也意味著無法被截斷。有序廣播: 則是同步執行的廣播,廣播發出後,同一時刻只有一個廣播接收器能收到,當此廣播接收器邏輯執行完畢後,廣播才會繼續傳遞,有先後順序,效率低,可被截斷。
5.2 接收系統廣播
5.2.1 動態註冊監聽網路變化
廣播接收器可自由選擇自己要註冊監聽的廣播,註冊監聽廣播有兩種方式,在程式碼中註冊(動態註冊)和在AndroidManifest.xml中註冊(靜態註冊優化效果,實現提示當前網路是否可用:public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; /** * 1.定義了一個內部類,繼承自BroadcastReceiver類,重寫接收到廣播後的執行方法 */ class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network changes!", Toast.LENGTH_SHORT).show(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 2.建立一個IntentFilter類例項,新增一個值為如下的action(因為當系統網路發生變化時發出的就是此值的廣播) */ intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); /** * 3.建立一個自定義廣播接收器類例項,然後呼叫registerReceiver進行註冊。 */ networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); /** * 4.動態註冊的廣播接收器最後都要取消註冊,不管是在哪個方法中 */ unregisterReceiver(networkChangeReceiver); } }
注意: Android 系統為了保證應用程式的安全性做了規定,如果程式需要訪問一些系統的關鍵性資訊,必須在配置檔案中宣告許可權才可以,否則程式將會直接崩潰,比如這裡查詢系統的網路狀態就是需要宣告許可權的。 開啟AndroidManifest.xml,加入以下宣告(在manifest節點下):@Override public void onReceive(Context context, Intent intent) { //首先通過getSystemService()方法得到ConnectivityManager的例項,這是系統服務類,專門用於管理網路連線 ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); //然後通過它的getActiveNetworkInfo()方法得到NetworkInfo例項 NetworkInfo network = connectivityManager.getActiveNetworkInfo(); //最後判斷是否有網路 if (network != null && network.isAvailable()) { Toast.makeText(context, "網路可用", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "網路不可用", Toast.LENGTH_SHORT).show(); } }
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
5.2.2 靜態註冊實現開機啟動
動態註冊有自由靈活的優勢,但也有缺點,即必須要在程式啟動後才能接收廣播。 實現開機後程序自動啟動: (1)新建一個廣播接收器類,繼承BroadcastReceiver類,重寫onReceive()方法。 (2)修改AndroidManifest.xml,如下:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jastar.broadcasttest">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--通過receiver標籤來靜態註冊廣播接收器-->
<receiver android:name=".receiver.BootCompleteReceiver">
<intent-filter>
<!--在此新增要監聽的廣播action-->
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
</application>
</manifest>
5.3 傳送自定義廣播
5.3.1 傳送標準廣播
Intent intent=new Intent("com.jastar.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
5.3.2 傳送有序廣播
Intent intent = new Intent("com.jastar.broadcasttest.MY_BROADCAST");
//第一個引數為intent,第二個引數為與許可權有關的字串
sendOrderedBroadcast(intent, null);
在AndroidManifest.xml中配置優先順序:
終止廣播繼續傳遞可在onReceive()方法中新增以下程式碼: abortBroadcast();
5.4 本地廣播
1.系統全域性廣播可被其他任何的應用程式接收到,而本地廣播則只能傳遞在應用程式的內部,從而保證安全問題。 2.本地廣播並不複雜,通過LocalBroadcastManager來管理,具體用法跟動態註冊廣播和接收是類似的 (1)獲取LocalBroadcastManager例項 LocalBroadcastManager localManager = LocalBroadcastManager.getInstance(this); (2)傳送本地廣播 localManager.sendBroadcast(intent); //有序廣播 localManager.sendBroadcastSync(intent); (3)註冊接收廣播 //引數1為監聽類,引數2為IntentFilter localManager.registerReceiver(localReceiver,intentFilter); //取消註冊 localManager.unregisterReceiver(localReceiver); 3.本地廣播的優勢 (1)廣播只在應用程式內,不用擔心機密資料洩露 (2)其他程式無法將廣播發送到我們程式內部,不需要擔心安全漏洞的隱患 (3)比傳送全域性廣播更高效相關推薦
Android學習筆記之百度地圖(駕車路線搜尋及RouteOverlay步行路線搜尋及RouteOverlay)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android學習筆記——給Button新增監聽器(四)
方式1:建立成員內部類 //1:建立內部類 class ButtonListener implements OnCickListener{ //重寫OnClick方法 @Override public void onCl
Android學習筆記之百度地圖(周邊檢索poiSearchNearBy跳轉頁面並輸出搜尋結果)
package xiaosi.baiduMap;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import com.baidu.map
【Android學習筆記】 點選穿透(Click Through)
問題:開發一個App,主介面用了Activity,子頁面用了Fragment。從Activity跳轉到Fragment後Fragment透明,並且點選擊穿到Axtivity。 分析:剛開始沒有注意到點選擊穿,就是把背景換成不透明的顏色,這時在點選Fragment空白處時才發
Android學習筆記——webview 適配相關(不定期更貼填坑)
業務需要,會用到android webview相關跳轉H5頁面,開發中發現坑不少,很多東西之前都不知道,想立個彙總帖,之後遇到坑了就來更新一下。 1.webview 自適應手機螢幕大小
【D3D11遊戲程式設計】學習筆記十五:混合(Blending)
(注:【D3D11遊戲程式設計】學習筆記系列由CSDN作者BonChoix所寫,轉載請註明出處:http://blog.csdn.net/BonChoix,謝謝~) 在D3D11中,“混合”發生在畫素著色器階段的下一階段,即Output Me
android學習筆記之多執行緒(二)
這個需要在輸出,點選start後會隔一會輸出一行字,點end會結束輸出。 Code package tk.handleractivity; import android.app.Activity; import android.os.Bundle; import andr
Android學習筆記(五)廣播(Broadcast)
5. 廣播 5.1 廣播 Android中的廣播主要分為兩種型別:標準廣播和有序廣播。 標準廣播: 是一種完全非同步執行的廣播,廣播發出後,所有的廣播接收器都會在同一時間內接受這條廣
Pro Android學習筆記(一五五) 感測器(5) 磁場感測器和方位(上)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android學習筆記——Activity之間的跳轉(五)
1:使用Intent(意圖)的方式實現Activity跳轉 (1)MainActivity.java: public class MainActivity extends Activity { private Button startOther; @Override pro
Android學習筆記(五五) 通知Notification(下)
Notification除了用於後臺服務通知,還常用在下面情況:(1)保持服務存在。當系統記憶體不足時,系統會認為某後臺服務佔用記憶體時間太長而中止該服務,以釋放記憶體。對於某些服務,例如播放音樂,如果系統對該服務進行資源釋放,使用者體驗就成了音樂突然沒有聲音。對這類服務,我們希望享有更高的優先級別,不會被系
Android學習筆記(五六):位置Location
建議更新20130522的ADT版本,無論是Linux下還是Windows下,我覺得速度快了很多。而且將Android SDK Tool升級到ver 22版本後,原來的ADT有很多不明原因問題,載入App到模擬器上出現連線不上的情況。 允許應用具備定位功能 Location是手機功能的一大特色,衛星導航除了
Pro Android學習筆記(一五七):感測器(7):其他一些感測器
Wei:本來想下面接著的是NFC,NFC是支援讀寫的,和其他感測器在程式設計上很不一樣,但是手頭上找不到支援NFC的手機,記得以前三星Galaxy系列支援,例如幾年前的S3,而國產手機要比較貴的才支援,P6和Z7 mini都不支援,有興趣可以閱讀http://blog.csdn.net/pku_andro
Pro Android學習筆記(五十):ActionBar(3):搜尋條
ActionBar中的搜尋條 我們同樣可以在Action Bar中嵌入搜尋條。在小例子中,我們在action bar中嵌入一個搜尋框的widget(稱為search view)。當我們輸入搜尋內容,能夠在指定的activity中開啟(稱為searchable activitiy),本例不做實質的搜尋,只是
Android學習筆記(五)——通過全域性變數傳遞資料
1、全域性物件是Activity之間傳遞資料的一種比較實用的方式,比如在JavaWeb中有四個作用域,這四個作用域從小到大分別是Page、Request、Session和Application,其中Application域在應用程式的任何地方都可以使用和訪問,除非是Web伺
Pro Android學習筆記(二五):使用者介面和控制(13):LinearLayout和TableLayout
佈局Layout Layout是容器,用於對所包含的view進行佈局。layout是view的子類,所以可以作為view嵌入到其他的layout中。Android的layout有LinearLayout、TableLayout,RelativeLayout、FrameLayout、GridLayout。 線
Pro Android學習筆記(四五):Dialog(2):DialogFragment
DialogFragment的例項newInstance()已經在上一次學習筆記中實現。我們建立dialog的UI,可以通過重寫DialogFragment的兩個函式當中的一個來實現,這兩個函式是onCreateView()和onCreateDialog(),前者返回view,後者返回dialog,如同通過
Pro Android學習筆記(一三七):Home Screen Widgets(3):配置Activity
map onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly
Pro Android學習筆記 ActionBar(1):Home圖標區
ces tom 新的 方便 find rac vertica lba manifest ?? Pro Android學習筆記(四八):ActionBar(1):Home圖標區 2013年03月10日 ? 綜合 ? 共 3256字 ? 字號 小 中 大 ? 評論關閉
Linux學習筆記第五周第一次課(3月5日)
rpm -ivh yum install yum remove yum update rpm -e 7.1 安裝軟件包的三種方法三種方法rpm工具,安裝會提示依賴其他包,要一個包一個包安裝;yum工具,自動下載安裝依賴包,最容易安裝;源碼包,源代碼,需要編譯器編譯再安裝,最難安裝;7.2