1. 程式人生 > >Android入門:廣播發送者與廣播接收者

Android入門:廣播發送者與廣播接收者

一、廣播發送者&廣播接收者介紹

1.廣播接收者

廣播接收者簡單地說就是接收廣播意圖的Java類,此Java類繼承BroadcastReceiver類,重寫:

public void onReceive(Context context,Intent intent),其中intent可以獲得傳遞的資料;

廣播意圖就是通過Context.sendBroadcast(Intent intent)或Context.sendOrderedBroadcast(Intent intent)傳送的意圖,通過這個語句,能夠廣播給所有滿足條件的元件,比如intent設定了action="com.xiazdong",則所有在AndroidManifest.xml中設定過<action android:name="com.xiazdong"/>的廣播接收者都能夠接收到廣播;

:onReceive方法必須在10秒內完成,如果沒有完成,則拋“Application No Response”當廣播接收者onReceive方法需要執行很長時間時,最好將此耗時工作通過Intent傳送給Service由Service完成,並且不能使用子執行緒解決,因為BroadcastReceiver是接收到廣播後才建立的,並且生命週期很短,因此子執行緒可能在沒有執行完就已經被殺死了。

  1. publicvoid onReceive(Context context,Intent intent){  
  2.     Intent intent = new Intent(context,XxxService.
    class);  
  3.     context.startService(intent);  
  4. }  


2.廣播發送者

通常廣播發送方就是呼叫Context.sendBroadcast()的程式,而廣播接收者就是繼承BroadcastReceiver的程式;

通常廣播發送方都是通過隱式意圖,這樣才能傳送給多人;

廣播發送方分為普通廣播和有序廣播;

同步廣播:傳送方發出後,幾乎同時到達多個廣播接收者處,某個接收者不能接收到廣播後進行一番處理後傳給下一個接收者,並且無法終止廣播繼續傳播;Context.sendBroadcast(intent);

有序廣播:廣播接收者需要提前設定優先順序,優先順序高的先接收到廣播,優先順序數值為-1000~1000,在AndroidManifest.xml的<intent-filter android:priority="xxx">設定;比如存在3個廣播接收者A、B、C,優先順序A>B>C,因此A最先收到廣播,當A收到廣播後,可以向廣播中新增一些資料給下一個接收者(intent.putExtra()),或者終止廣播(abortBroadcast());Context.sendOrderedBroadcast(intent);

二、廣播接收者核心程式碼

同步廣播發送方核心程式碼:

  1. Intent intent = new Intent();  
  2. intent.setAction("...");  
  3. Context.sendBroadcast(intent);  


有序廣播發送方核心程式碼:

  1. Intent intent = new Intent();  
  2. intent.setAction("...");  
  3. Context.sendOrderedBroadcast(intent,null);  

廣播接收者核心程式碼:

  1. publicclass Receiver extends BroadcastReceiver{  
  2.     publicvoid onReceive(Context context, Intent intent) {  
  3.         Bundle bundle = intent.getExtras();  
  4.         ...  
  5.     }  
  6. }  

AndroidManifest.xml

  1. <application>
  2.     <receiverandroid:name=".Receiver">
  3.         <intent-filterandroid:priority="1000">
  4.             <actionandroid:name="com.xiazdong"/>
  5.         </intent-filter>
  6.     </receiver>
  7. </application>


三、廣播例項

1.同步廣播例項

場景說明:


(1)廣播發送者:

  1. package com.xiazdong.broadcastsender;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. import android.widget.Toast;  
  9. publicclass MainActivity extends Activity {  
  10.     private Button button;  
  11.     private OnClickListener listener = new OnClickListener(){  
  12.         @Override
  13.         publicvoid onClick(View v) {  
  14.             Intent intent = new Intent();  
  15.             intent.setAction("com.xiazdong");  
  16.             intent.putExtra("name""xiazdong");  
  17.             MainActivity.this.sendBroadcast(intent);  
  18.             Toast.makeText(getApplicationContext(), "傳送廣播成功", Toast.LENGTH_SHORT).show();  
  19.         }  
  20.     };  
  21.     @Override
  22.     publicvoid onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.main);  
  25.         button = (Button)this.findViewById(R.id.button);  
  26.         button.setOnClickListener(listener);  
  27.     }  
  28. }  


(2)廣播接收者

  1. package com.xiazdong.broadcastreceiver1;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.util.Log;  
  6. publicclass Receiver extends BroadcastReceiver {  
  7.     @Override
  8.     publicvoid onReceive(Context context, Intent intent) {  
  9.         String name = intent.getExtras().getString("name");  
  10.         Log.i("Recevier1""接收到:"+name);  
  11.     }  
  12. }  


AndroidManifest.xml

  1. <receiver android:name=".Receiver">  
  2.         <intent-filter>  
  3.              <action android:name="com.xiazdong"/>  
  4.         </intent-filter>  
  5. </receiver>  


結果:


2.有序廣播例項

場景說明:


(1)廣播發送者

  1. package com.xiazdong.broadcastsender;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. import android.widget.Toast;  
  9. publicclass MainActivity extends Activity {  
  10.     private Button button;  
  11.     private OnClickListener listener = new OnClickListener(){  
  12.         @Override
  13.         publicvoid onClick(View v) {  
  14.             Intent intent = new Intent();  
  15.             intent.setAction("com.xiazdong");  
  16.             intent.putExtra("name""xiazdong");  
  17.             MainActivity.this.sendOrderedBroadcast(intent, null);   //有序廣播發送
  18.             Toast.makeText(getApplicationContext(), "傳送廣播成功", Toast.LENGTH_SHORT).show();  
  19.         }  
  20.     };  
  21.     @Override
  22.     publicvoid onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.main);  
  25.         button = (Button)this.findViewById(R.id.button);  
  26.         button.setOnClickListener(listener);  
  27.     }  
  28. }  

(2)廣播接收者


Receiver1

  1. package com.xiazdong.broadcastreceiver1;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.util.Log;  
  6. publicclass Receiver extends BroadcastReceiver {  
  7.     @Override
  8.     publicvoid onReceive(Context context, Intent intent) {  
  9.         String name = intent.getExtras().getString("name");  
  10.         Log.i("Recevier1""接收到:"+name);  
  11.         abortBroadcast();   //Receiver1接收到廣播後中斷廣播
  12.     }  
  13. }  


AndroidManifest.xml

  1. <receiverandroid:name=".Receiver">
  2.       <intent-filterandroid:priority="1000"><!-- 設定最高優先順序 -->
  3.          <actionandroid:name="com.xiazdong"/>
  4.       </intent-filter

    相關推薦

    Android入門廣播送者廣播接收者

    一、廣播發送者&廣播接收者介紹 1.廣播接收者 廣播接收者簡單地說就是接收廣播意圖的Java類,此Java類繼承BroadcastReceiver類,重寫: public void onReceive(Context context,Intent in

    Android入門 廣播送者廣播接收者

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    Android-廣播接收(Java程式碼中訂閱)

    Android四大元件之一廣播,使用的也比較多,廣播可大致分為兩種,一種是Android系統區域的廣播,是由系統指令發出,例如:點亮螢幕廣播,開機過程中的一些廣播 省略…, 然而還有一種廣播就是我們自己定義,自己來控制發出的廣播,以下就簡單介紹以下,在程式碼中傳送廣播和接收廣播:   第一步

    Android入門廣播接收者應用(電話攔截器)

    一、電話攔截器應用說明 在我們輸入完電話號碼並撥打電話時,系統會發出一個有序廣播(action="android.intent.action.NEW_OUTGOING_CALL"),並且預計會發送給電話撥號器應用的廣播接收者,但是我們可以設定一個優先順序更高的攔截器廣播

    GitHub入門如何上傳下載工程?

    由於經常要在家寫程式碼,所以需要有個能夠方便訪問程式碼管理工具。最近嘗試了一下GitHub。經過了一翻糾結之後,基本上掌握了他的使用方式。  要使用GitHub需要首先在其網站上進行註冊。其官方網站是https://github.com/。註冊的流程在這裡就不多少了,大家按照它的提示,一步

    Pytorch入門資料的載入處理

    0. 寫在前面 在深度學習的問題中處理資料都會佔據比較大的時間,只有把資料處理好了才有可能對模型進行訓練、測試等後續工作。 PyTorch提供了很多用於讓資料載入變得更加方便的工具,接下來我們就來學習一下怎麼樣處理那些PyTorch沒有提供直接介面的資料。 在學

    Android入門Activity四種啟動模式

    一、啟動模式介紹   啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標籤的android:launchMode屬性設定;   啟動模式有4種,分別為standard、singleTop、singleTask、singleInstance; 講解啟動模式之前

    Android開發已經布的APP,如何更改啟動圖片

    由於近由於工作需要,要實現在已經發布的APP上實現更新啟動圖片,發現網上沒有這塊的資訊,雖然實現方式比較簡單,但還是寫下來,供參考; 1、首先,用一個介面訪問網路,下載新的啟動畫面的圖片,我用的是ImageView裡面的一張畫面來實現的,程式碼如下: View t

    Android 基礎Fragment的介紹應用,QQ底欄,側滑選單

    Fragment介紹 Android是在Android 3.0 (API level 11)開始引入Fragment的。可以把Fragment當成Activity的一個介面的一個組成部分,甚至Activity的介面可以完全有不同的Fragment組成,而且Fragmen

    Caffe入門LeNet模型介紹網路訓練測試例子

    學習卷積神經網路,首先需要理解卷積的概念,二維離散卷積的概念,以及卷積核在影象中進行卷積操作得出結果圖的實際直觀含義。 卷積的實際計算方式:二維卷積更正式的名字是塊迴圈矩陣(double block circulant matrix),矩陣論,Toeplitz矩陣 caf

    Android入門——Broadcast Receiver詳解應用

    引言 作為Android四大元件之一——BroadcastReceive。BroadcastReceive廣泛運用在APP的開發中,其他的三大應用元件不同一樣,是唯一需要被動接收,即負責接收的廣播接收器永遠不知道什麼時候可以接收到廣播,這種機制其實有點像Eve

    Android入門使用Android自帶媒體庫讀取MP3檔案

    今天研究了下如何在Android讀取SD卡中的媒體檔案(MP3),開始的思路是遍歷SD卡所有目錄,相信這也是所有開發者第一會想到的思路,無法就是遍歷所有檔案,將所有後綴名為.mp3讀取出來;但是最後發現,如果你對And

    新手入門瞭解WWW服務HTTP協議(一)

    歷史上,先後問世了多個具有重大社會影響的電子通訊技術。第一個這樣的技術是19世紀70年代發明的電話。電話使得不在同一物理位置的兩人得以實時 地口頭交流。它對社會有重大的影響——有好的也有壞的。下一個電子通訊技術是20世紀20年代及30年代問世的廣播收音機/電視機。廣播收音

    Anatomy of a Database System學習筆記 - 事務控制恢復

    unp 供應商 format 要求 獲取 處理 因此 coupling 相對 這一章看起來是講存儲引擎的。作者抱怨數據庫被黑為“monolithic”、不可拆分為可復用的組件;但是實際上除了事務存儲引擎管理模塊,其他模塊入解析器、重寫引擎、優化器、執

    Android 送本地廣播 以及創建廣播接收器

    ack creat 註冊 string bundle cas err activity 實例 1、創建本地廣播接收器 18 public class MainActivity extends AppCompatActivity{ 19 private Button

    c++ 網絡編程(六)TCP/IP LINUX下 socket編程 多播廣播 實現一次送所有組客戶端都能接收到

    send all users 代碼示例 proto 次數 不可 的人 ssa 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 鍥子:有這麽一種情況,網絡電臺可能需要同時向成

    android adb shell 模擬廣播送和鍵值事件

    1.模擬傳送廣播adb shell am broadcast -a 定義的廣播action string2.模擬上下左右 確定鍵值adb shell input keyevent  "value"va

    Android廣播的靜態動態註冊

      靜態廣播:不用程式啟動就可以接收,可用作開機自啟動(裝置開機時會發送廣播,下面列出幾項廣播的ACTION),當然也能自己設定action的值。   Intent.ACTION_BOOT_COMPL

    AndroidBroadcastReceiver採用廣播接收者攔截外拔電話、傳送廣播、其他常用廣播、特性

    public class PhoneBroadcastReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {

    Android廣播管理三--廣播送(sendBroadcast)流程分析

            前面我們分析了Android應用程式註冊廣播接收器的過程,接下來它還要等待ActivityManagerService將廣播分發過來。ActivityManagerService是如何得到廣播並把它分發出去的呢?          廣播的傳送者將廣播發送到A