Android——发送和接收广播

简介: 一,发送广播 利用Intent来发送广播。使用:在需要发送广播的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来,通过以下三种方法将Intent广播出去:1,Context.sendBroadcast2,Context.sendOrderedBroadCast3,Context.sendStickyBroadcast 三种方法的区别:1,sendBroadcast和sendStickyBroadcast发送出去的Intent,对于所有满足条件的BroadcastReceiver都会执行其onReceive方法。



一,发送广播

 

利用Intent来发送广播。


使用:在需要发送广播的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来,通过以下三种方法将Intent广播出去:


1,Context.sendBroadcast

2,Context.sendOrderedBroadCast

3,Context.sendStickyBroadcast

 

三种方法的区别:


1sendBroadcastsendStickyBroadcast发送出去的Intent,对于所有满足条件的BroadcastReceiver都会执行其onReceive方法。但若有多个满足条件的BroadcastReceiver,其执行onReceive方法的顺序是没有保证的。

 

2,通过sendOrderedBroadCast方法发送出去的Intent,会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行onReceive方法,相同优先级的BroadcastReceiver执行onReceive方法的顺序是没有保证的。

 

其中,sendStickyBroadcast主要的不同时,Intent在发送后会一直存在,并且在以后调用registerReceiver注册相匹配的Receiver时会把这个Intent对象直接返回给新注册的Receiver

 

通常我们在发送广播时候,使用的是sendBroadcast,但需要注意的是,在构造Intent时,必须用一个全局唯一的字符串标示其要执行的动作,通常使用应用程序的包名称,也可以采用自己定义的动作。如果要在Intent中传递其他数据,可以用IntentputExtra方法。

 

String Intent_Activity="lhc";

Intent intent=newIntent(Intent_Activity)

Intent.putExtra("参数",“参数值”);

sendBroadcast(intent);




二,接收广播


在于Activity相同的包下面定义广播器。广播器类要继承BroadcastReceiver类。

但是在接收到广播之后,要想处理相关事件,我们必须覆盖其OnReceiver方法,在该方法中实现对广播事件的相关处理,当安卓系统接收到与之匹配的广播消息时,会自动启动此BroadcastReceiver开始接受广播。

 

注意的是:OnReceive方法必须在5秒钟内执行完成,否则安卓系统会认为该组建失去响应,并提示用户强行关闭该组件。因此对于比较耗时的操作,要单独开一个线程。



三,声明广播


两种广播的注册方式:


1,代码注册广播

2,在AndroidMainfest.xml中注册

 

两种注册类型的区别:

1,第一种不是常驻型广播,也就是广播跟随程序的生命周期;

2,第二种是常驻类型的广播,也就是说当应用程序关闭后,如果有信息广播过来,程序广播接收器也会被系统调用自动运行。


四,示例

                     

           1,发送广播

                       

public class BroadCastActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button=(Button)super.findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				String Intent_Action="com.example.broadcastdemp";
				Intent intent=new Intent(Intent_Action); //
				sendBroadcast(intent);//发送广播,并传递intent
				Log.e("BroadcastReceiver","sendbroadcast");
			}
		});
	}

          2,接收广播


public class BroadcastReceiverActivity extends BroadcastReceiver{
	@Override
	public void onReceive(Context arg0, Intent arg1) {
		String Intent_Action=arg1.getAction();
		if("com.example.broadcastdemp".equals(Intent_Action)){
			Log.e("BroadcastReceiver","onReceive");
		}
	}
}


      4,使用XML配置接收广播的类


             

  <receiver android:name=".BroadcastReceiverActivity">
            <intent-filter>
                <action android:name="com.example.broadcastdemp"/>
            </intent-filter>
        </receiver>



    run 下看看:


                










目录
相关文章
|
8月前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
430 0
|
8月前
|
安全 Android开发
Android 预置可卸载分区接收不到任何广播问题分析和解决
Android 预置可卸载分区接收不到任何广播问题分析和解决
229 0
|
7月前
|
设计模式 Android开发
44. 【Android教程】广播接收器:Broadcast Receiver
44. 【Android教程】广播接收器:Broadcast Receiver
162 2
|
7月前
|
存储 Android开发 Kotlin
Kotlin开发安卓app,在使用 MediaPlayer 播放 res/raw 中的音乐时遇到突然中断的问题,而 onErrorListener 没有接收到任何报错
在使用 Android MediaPlayer 播放 res/raw 中的音乐时遇到中断问题,可能的原因包括资源问题、媒体文件编码格式、生命周期管理和设备资源配置。要排查问题,检查音频文件是否正确包含,格式编码是否支持,MediaPlayer 是否正确管理及释放,以及设备是否有足够存储和配置。通过设置 onErrorListener 日志和确保在 onDestroy 中释放资源来调试。如果文件过大,考虑使用 AssetManager。遵循这些步骤可帮助诊断并解决播放中断的问题。
|
Java API Android开发
Android 静态注册广播接收者和动态注册广播接收者(Android8.0之前和之后)
Android 静态注册广播接收者和动态注册广播接收者(Android8.0之前和之后)
395 0
|
8月前
|
XML Java Android开发
Android Studio App开发之监听系统广播Broadcast的讲解及实战(包括接收分钟到达广播、网络变更广播、定时管理器等 附源码)
Android Studio App开发之监听系统广播Broadcast的讲解及实战(包括接收分钟到达广播、网络变更广播、定时管理器等 附源码)
501 0
|
Android开发
Android 使用UDP进行通讯(发送数据和接收数据)
Android 使用UDP进行通讯(发送数据和接收数据)
1923 0
|
Android开发
Android WebView选择图片、发送图片
Android WebView选择图片、发送图片
655 0
|
存储 API Android开发
Android接收短信-createFromPdu
Android接收短信-createFromPdu
163 0
|
Java 开发工具 Android开发
RK3128 Android 7 BOX SDK 应用无法接收广播自启 + 眠休不黑屏问题
RK3128 Android 7 BOX SDK 应用无法接收广播自启 + 眠休不黑屏问题
481 0