导航:首页 > 操作系统 > 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广播取消注册相关的资料

热点内容
程序员修复游戏 浏览:866
没有倒直角命令怎么办 浏览:157
天仙pdf 浏览:756
见证取样app在哪里注册 浏览:186
网状解压球里面的珠子是泡大珠吗 浏览:502
爱拍小潮的服务器地址 浏览:844
小米锁如何用2个app操作 浏览:666
算法中单边错误 浏览:820
android底层是什么 浏览:613
php自学好还是培训好 浏览:88
国开乐学app电脑版如何下载 浏览:868
天津同步网络时钟服务器云服务器 浏览:898
中文起床战争服务器ip地址 浏览:950
java输出objectobject 浏览:411
反编译去除软件界面图标 浏览:664
前端程序员一天工作任务 浏览:777
数控编程考试资格证 浏览:233
女性程序员有多少 浏览:34
12345压缩包下载 浏览:210
尝试解压言情小说校花 浏览:395