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是接收到廣播後才建立的,並且生命週期很短,因此子執行緒可能在沒有執行完就已經被殺死了。
- publicvoid onReceive(Context context,Intent intent){
-
Intent intent = new Intent(context,XxxService.
- context.startService(intent);
- }
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);
二、廣播接收者核心程式碼
同步廣播發送方核心程式碼:
- Intent intent = new Intent();
- intent.setAction("...");
- Context.sendBroadcast(intent);
有序廣播發送方核心程式碼:
- Intent intent = new Intent();
- intent.setAction("...");
- Context.sendOrderedBroadcast(intent,null);
廣播接收者核心程式碼:
- publicclass Receiver extends BroadcastReceiver{
- publicvoid onReceive(Context context, Intent intent) {
- Bundle bundle = intent.getExtras();
- ...
- }
- }
AndroidManifest.xml
- <application>
- <receiverandroid:name=".Receiver">
- <intent-filterandroid:priority="1000">
- <actionandroid:name="com.xiazdong"/>
- </intent-filter>
- </receiver>
- </application>
三、廣播例項
1.同步廣播例項
場景說明:
(1)廣播發送者:
- package com.xiazdong.broadcastsender;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- publicclass MainActivity extends Activity {
- private Button button;
- private OnClickListener listener = new OnClickListener(){
- @Override
- publicvoid onClick(View v) {
- Intent intent = new Intent();
- intent.setAction("com.xiazdong");
- intent.putExtra("name", "xiazdong");
- MainActivity.this.sendBroadcast(intent);
- Toast.makeText(getApplicationContext(), "傳送廣播成功", Toast.LENGTH_SHORT).show();
- }
- };
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button = (Button)this.findViewById(R.id.button);
- button.setOnClickListener(listener);
- }
- }
(2)廣播接收者
- package com.xiazdong.broadcastreceiver1;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- publicclass Receiver extends BroadcastReceiver {
- @Override
- publicvoid onReceive(Context context, Intent intent) {
- String name = intent.getExtras().getString("name");
- Log.i("Recevier1", "接收到:"+name);
- }
- }
AndroidManifest.xml
- <receiver android:name=".Receiver">
- <intent-filter>
- <action android:name="com.xiazdong"/>
- </intent-filter>
- </receiver>
結果:
2.有序廣播例項
場景說明:
(1)廣播發送者
- package com.xiazdong.broadcastsender;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- publicclass MainActivity extends Activity {
- private Button button;
- private OnClickListener listener = new OnClickListener(){
- @Override
- publicvoid onClick(View v) {
- Intent intent = new Intent();
- intent.setAction("com.xiazdong");
- intent.putExtra("name", "xiazdong");
- MainActivity.this.sendOrderedBroadcast(intent, null); //有序廣播發送
- Toast.makeText(getApplicationContext(), "傳送廣播成功", Toast.LENGTH_SHORT).show();
- }
- };
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button = (Button)this.findViewById(R.id.button);
- button.setOnClickListener(listener);
- }
- }
(2)廣播接收者
Receiver1
- package com.xiazdong.broadcastreceiver1;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- publicclass Receiver extends BroadcastReceiver {
- @Override
- publicvoid onReceive(Context context, Intent intent) {
- String name = intent.getExtras().getString("name");
- Log.i("Recevier1", "接收到:"+name);
- abortBroadcast(); //Receiver1接收到廣播後中斷廣播
- }
- }
AndroidManifest.xml
- <receiverandroid:name=".Receiver">
- <intent-filterandroid:priority="1000"><!-- 設定最高優先順序 -->
- <actionandroid:name="com.xiazdong"/>
-
</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
Android:BroadcastReceiver:採用廣播接收者攔截外拔電話、傳送廣播、其他常用廣播、特性
public class PhoneBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {
Android廣播管理三--廣播發送(sendBroadcast)流程分析
前面我們分析了Android應用程式註冊廣播接收器的過程,接下來它還要等待ActivityManagerService將廣播分發過來。ActivityManagerService是如何得到廣播並把它分發出去的呢? 廣播的傳送者將廣播發送到A