【Android】BroadcastReceiver

广播是android的四大组件之一。要使用广播,需要以下步骤:

1.定义广播接收器。

2.注册广播接收器。

3.向接收器发送广播。

定义广播接收器

定义一个广播接收器,继承BroadcastReceiver并重写onReceive(Context context, Intent intent)方法:

package com.zzj.ui.broadcastreceiverdemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Toast.makeText(context, intent.getExtras().getString("msg"),
				Toast.LENGTH_LONG).show();
	}

}

注册广播接收器

有两种方式注册广播接收器:静态注册和动态注册。通过静态方式注册的广播接收器叫常驻广播,通过动态方式注册的广播接收器叫非常驻广播

常驻广播

当你的应用程序关闭了,如果有广播信息来,你写的广播接收器同样的能接收到。

常驻广播就是在Androidmanifest.xml注册的广播:

<receiver
            android:name="com.zzj.ui.broadcastreceiverdemo.MyBroadcastReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="Action.StaticBroadcastReceiver" />
            </intent-filter>
        </receiver>

非常驻广播

当应用程序结束了,广播自然就没有了。

非常驻广播在代码中注册:

receiver = new MyBroadcastReceiver();
		IntentFilter intentFilter = new IntentFilter();
		intentFilter.addAction("Action.DynamicBroadcastReceiver");
		registerReceiver(receiver, intentFilter);

registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法在android.content.ContextWrapper类中。

我们一般都是在组件创建的时候注册动态广播,然后在组件销毁的时候注销广播:

unregisterReceiver(receiver);

发送广播

发送广播调用android.content.ContextWrapper.sendBroadcast(Intent intent)方法。可以使用显示Intent,也可以使用隐式Intent。需要注意的是,向动态广播接收器发送广播必须使用隐式Intent。

使用显示intent发送静态广播:

// 使用显示intent发送静态广播
		Intent intent = new Intent(this, MyBroadcastReceiver.class);
		intent.putExtra("msg", "IntentBroadcastReceiver");
		sendBroadcast(intent);

使用隐式Intent发送静态广播:

// 使用隐式Intent发送静态广播
		Intent staticIntent = new Intent();
		staticIntent.setAction("Action.StaticBroadcastReceiver");
		staticIntent.putExtra("msg", "StaticBroadcastReceiver");
		sendBroadcast(staticIntent);

使用隐式Intent发送动态广播:

// 使用隐式Intent发送动态广播
		Intent dynamicIntent = new Intent();
		dynamicIntent.setAction("Action.DynamicBroadcastReceiver");
		dynamicIntent.putExtra("msg", "DynamicBroadcastReceiver");
		sendBroadcast(dynamicIntent);

通常情况下应该使用隐式intent发送广播。实际上由于广播的性质,即使广播接收器不存在,也可以发送广播,因为广播发送出去之后,广播发送者并不关心广播是否被接收。这一点与启动一个activity不一样。

使用系统广播

如果要使用系统广播,则只需要定义广播接收器和注册广播接收器,然后使用IntentFilter拦截系统广播,不需要应用程序主动发送广播,因为系统广播由系统发送。下面附上几个常用的系统广播:

开机广播:

public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";

开屏广播:

public static final String ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON";

关屏广播:

public static final String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";

以上几个常量都定义在Intent类中。

网络连接变化广播:

public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";

这个常量定义在ConnectivityManager类中。

    原文作者:zhangzeyuaaa
    原文地址: https://blog.csdn.net/zhangzeyuaaa/article/details/41147061
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞