導航:首頁 > 操作系統 > android廣播取消注冊

android廣播取消注冊

發布時間:2025-06-03 09:08:27

1. android注冊廣播有幾種方式,分別是什麼

注冊方式有兩種:
1、靜態注冊,就是在manifest文件里配置一下,這種方式注冊的廣播屬於系統級廣播。你的應用沒打開也能收到廣播。比如你要做一個收到某廣播就啟動你的應用的功能可以這樣搞。
2、動態注冊,在代碼里執行一個rigisterBroadcastReciver(可能拼寫有誤)的方法。這種你要自己作好反注冊。這種廣播可以做成你的應用啟動後才監聽,關閉後就不監聽的效果。

2. BroadcastReceiver的使用

廣播接收器(BroadcastReceiver)是Android四大組件之一,負責監聽各種廣播並傳遞消息。其本質是一個全局監聽器,可實現不同組件間解耦合通信。廣播的最大特點是發送方不關心接收方是否接收到數據,接收方如何處理數據。

與Activity、Service相比,BroadcastReceiver是系統級別的監聽器,擁有獨立進程,能夠響應存在匹配的Intent廣播。系統創建BroadcastReceiver實例並自動調用其onReceive()方法。若onReceive()方法未在10秒內執行完成,Android將拋出ANR異常。因此,應避免在onReceive()方法中執行耗時操作,推薦通過Intent啟動Service處理耗時任務,以免出現內存泄漏。

注冊方式有兩種:靜態注冊與動態注冊。

靜態注冊時,需創建自定義BroadcastReceiver類並實現onReceive()方法。在AndroidManifest.xml中進行注冊,且無法在某個界面中實現,否則可能會拋出異常。靜態注冊的廣播即使Activity銷毀後仍可接收,即使進程被殺死,也能接收到廣播。動態注冊則在Activity的onResume()中注冊,onPause()中注銷,受Activity生命周期影響。

注冊方式的差異包括:靜態注冊的廣播類必須單獨定義,動態注冊的廣播則可以寫在界面中;靜態注冊的廣播不受Activity生命周期影響,動態注冊的廣播則受影響;有序廣播中,優先順序高的接收器優先接收到廣播,動態注冊優先於靜態注冊。

Android系統提供了多種系統廣播,如設備狀態變化、時間變化等。普通廣播為用戶自定義廣播,有序廣播允許設置接收優先順序,優先順序高者可決定是否接收廣播,無序廣播則允許所有接收器接收廣播信息。應用內廣播用於增強安全性,避免APP內部廣播被其他APP接收。

使用時,需注意避免在onReceive()方法中執行耗時操作,推薦通過Intent啟動Service執行任務。注冊BroadcastReceiver時,可設置exported屬性為false限制接收外部廣播,發送廣播時需指定目標接收器的包名,增加安全性。使用LocalBroadcastManager發送應用內廣播,確保BroadcastReceiver也使用LocalBroadcastManager注冊。注冊BroadcastReceiver時,可增設許可權驗證,增加安全性。

3. android 注冊廣播有多少種方式

有兩種注冊廣播方式:
1.常駐型廣播
常駐型廣播,當應用程序關閉了,如果有廣播信息來,寫的廣播接收器同樣的能接收到,它的注冊方式就是在應用程序的AndroidManifast.xml 中進行注冊,這種注冊方式通常又被稱作靜態注冊。這種方式可以理解為通過清單文件注冊的廣播是交給操作系統去處理的。示例代碼如下:
AndroidManifest.xml中配置廣播

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="spl.broadCastReceiver"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".BroadCastReceiverActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!--廣播注冊、name裡面填寫廣播類的路徑-->
<receiver android:name=".SmsBroadCastReceiver">
<intent-filter android:priority="20">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

</application>

<uses-sdk android:minSdkVersion="7" />

<!-- 許可權申請 -->
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

</manifest>

2.非常駐型廣播
非常駐型廣播,當應用程序結束了,廣播自然就沒有了,比如在 Activity 中的 onCreate 或者 onResume 中注冊廣播接收者,在 onDestory 中注銷廣播接收者。這樣廣播接收者就一個非常駐型的了,這種注冊方式也叫動態注冊。這種方式可以理解為通過代碼注冊的廣播是和注冊者關聯在一起的。比如寫一個監聽 SDcard 狀態的廣播接收者:
package cn.sunzn.mosecurity.activity;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Environment;

public class SDcard extends Activity {
SdcardStateChanageReceiver sdcardStateReceiver;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sdcardStateReceiver = new SdcardStateChanageReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addDataScheme("file");
registerReceiver(sdcardStateReceiver, filter);
}

protected void onDestroy() {
unregisterReceiver(sdcardStateReceiver);
}

class SdcardStateChanageReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
checkSDCard();
}

public void checkSDCard() {
String state = Environment.getExternalStorageState();
System.out.println(state);
if (state.equals(Environment.MEDIA_REMOVED) || state.equals(Environment.MEDIA_UNMOUNTED)) {
System.out.println("SDCard 已卸載!");
}
}
}
}

4. android中怎麼發送帶內容的有序廣播

(一),BroadcastReceiver用於監聽被廣播的事件(Intent),為了達到這個目的,BroadcastReceiver必須進行注冊,注冊的方法有以下兩種:
1、靜態注冊:
靜態注冊方式是在AndroidManifest.xml的application裡面定義receiver並設置要接收的action。
如果在清單配置文件中配置了廣播接收器,那麼程序在安裝後會自動注冊廣播接收器。
靜態注冊方式的特點:不管該應用程序是否處於活動狀態,都會進行監聽。
<receiver
android:name=".CallReceiver"
android:enabled="true">
<intent-filter >
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>

其中,MyReceiver為繼承BroadcastReceiver的類,重寫了onReceiver方法,並在onReceiver方法中對廣播進行處理。<intent-filter>標簽設置過濾器,接收指定action廣播。

2、動態注冊:
動態注冊方式是在activity裡面調用當前上下文對象的registerReceiver() 方法 來注冊,和靜態的內容差不多。一個形參是receiver對象,另一個是IntentFilter對象。而IntentFilter構造方法的參數是要接收的action。
動態注冊方式特點:在代碼中進行注冊後,當應用程序關閉後,就不再進行監聽。
MyReceiver receiver = new MyReceiver();
//創建過濾器,並指定action,使之用於接收同action的廣播
IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
//注冊廣播接收器
registerReceiver(receiver, filter);
(二)、發送廣播:
// 指定廣播目標Action
Intent intent = new Intent("MyReceiver_Action");
// 可通過Intent攜帶消息
intent.putExtra("msg", "發送廣播");
// 發送廣播消息
sendBroadcast(intent);
(三)、注銷BroadcastReceiver:
1、一般在onStart中注冊BroadcastReceiver,在onStop中取消BroadcastReceiver。
2、一個BroadcastReceiver 對象只有在被調用onReceive(Context, Intent)時才有效,當從該函數返回後,該對象就無效的了,結束生命周期。
//注銷廣播接收器
unregisterReceiver(receiver);

5. 注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。

android中,不同進程之間傳遞信息要用到廣播,可以有兩種方式來實現。
第一種方式:在Manifest.xml中注冊廣播,是一種比較推薦的方法,因為它不需要手動注銷廣播(如果廣播未注銷,程序退出時可能會出錯)。
具體實現在Manifest的application中添加:上面兩個android:name分別是廣播名和廣播的動作(這里的動作是表示系統啟動完成),如果要自己發送一個廣播,在代碼中為:
Intent i = new Intent(「android.intent.action.BOOT_COMPLETED」);
sendBroadcast(i);
這樣,廣播就發出去了,然後是接收。
接收可以新建一個類,繼承至BroadcastReceiver,也可以建一個BroadcastReceiver的實例,然後得寫onReceive方法,實現如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(「android.intent.action.BOOT_COMPLETED」)) {
//Do something
}
}
};
第二種方式,直接在代碼中實現,但需要手動注冊注銷,實現如下:
IntentFilter filter = new IntentFilter();
filter.addAction(「android.intent.action.BOOT_COMPLETED」);
registerReceiver(mEvtReceiver, filter); //這時注冊了一個recevier ,名為mEvtReceiver,然後同樣用上面的方法以重寫onReceiver,
最後在程序的onDestroy中要注銷廣播,實現如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}

閱讀全文

與android廣播取消注冊相關的資料

熱點內容
按路徑生成模型的命令 瀏覽:949
hp伺服器f10配置ip地址 瀏覽:273
安卓citra怎麼切換上下屏幕 瀏覽:110
安卓系統怎麼給系統瘦身 瀏覽:916
權力政治pdf 瀏覽:847
gog離線包解壓不了 瀏覽:677
命令流軟體 瀏覽:246
壓迫感的照片是什麼app 瀏覽:249
今日股價突破三年新高源碼 瀏覽:840
蘋果x為什麼按著app屏抖 瀏覽:737
java反射創建實例 瀏覽:739
e筋翻樣需要加密狗嗎 瀏覽:606
多火文件夾怎麼刪 瀏覽:932
對m1卡進行加密 瀏覽:767
基岩版伺服器如何加模組 瀏覽:133
3dmax移除命令 瀏覽:553
w7自動關機命令無效 瀏覽:677
潛水泵3kw線圈能加密嗎 瀏覽:470
解壓要帶什麼去車管所 瀏覽:54
寶馬live導航數據無法解壓 瀏覽:785