一、BroadCast的基本使用步骤
1,使用步骤
<span style="white-space:pre"> </span>1,注册广播接收器,在接受方法里处理接受内容;
2,发送广播;
3,在使用结束后,取消注册接收器。
2,使用理解
广播相当于一个固有存在的硬件,在使用的时候,只需要关注:
1,发送广播,发送什么样数据;
2,广播接收器,处理接受到广播内容的后续操作;
2,核心是,将发出的广播与广播接收器链接。
二、BroadCast的两种使用方式
1,动态代码注册
【1】activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.future.broadcastdemo.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="广播接收者基本使用Demo:\n
1,注册广播接收器,在接受方法里处理接受内容;\n
2,发送广播;\n
3,在使用结束后,取消注册接收器。\n" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="registerBroadCastOnclick"
android:text="注册广播接收器" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="sendBroadCastOnclick"
android:text="发送广播" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="unRegisterBroadCastOnclick"
android:text="取消注册广播接收器" />
<TextView
android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
主要包括广播发送的三个步骤的的按钮触发器,以及内容接收后的展示。
【2】创建广播接收器
class ReceiveBroadCast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getStringExtra("data");
castContentDesc.setText(data);
}
}
实现功能是将接收到的数据用展示控件展示出来。
【3】广播接收器的注册
<pre name="code" class="java"> /**
* 注册广播接收器
*
* @param view
*/
public void registerBroadCastOnclick(View view) {
broadCast = new ReceiveBroadCast();
IntentFilter filter = new IntentFilter(Flag);
registerReceiver(broadCast, filter);
}
即是第一个按钮的点击事件。
【4】发送广播
/**
* 发送广播
*
* @param view
*/
public void sendBroadCastOnclick(View view) {
Intent intent = new Intent();
intent.putExtra("data", Calendar.getInstance().get(Calendar.SECOND) + "广播传送数据");
// intent.setAction(Flag);
intent.setAction("com.future.broadcastdemo.xml");
sendBroadcast(intent);
}
即是发送广播按钮点击事件。
【5】取消注册广播接收器
/**
* 取消注册广播接收器
*
* @param view
*/
public void unRegisterBroadCastOnclick(View view) {
/**
* 两种方式:
* 1,异常捕获
* 2,对象置空
*/
// try {
if (broadCast != null) {
unregisterReceiver(broadCast);
broadCast = null;
}
// } catch (Exception e) {
// /**
// * 提示消息
// */
// e.printStackTrace();
// }
}
重复取消注册会出现异常,用两种方式来保证异常的处理。
2,xml文件注册广播接收器
<receiver android:name=".BroadCastXML">
<intent-filter>
<action android:name="com.future.broadcastdemo.xml" />
</intent-filter>
</receiver>
广播接收器创建:
public class BroadCastXML extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getStringExtra("data");
Log.d("BroadCastXML", "xml注册广播接收者的使用data:" + data);
System.out.print("xml注册广播接收者的使用System_data:" + data);
}
}
发送广播,即可在接受器中接收消息。
xml注册中的Action与发送广播消息的Action必须保持一致。
3,展示效果
三、应用BroadCast监听网络状态
1,注册网络状态广播接收器
<pre name="code" class="java"> netReceive = new NetChangeBroadCastReceive();
/**
* 注册网络状态监听器
*/
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(netReceive, filter);
2,网络状态广播接收器实现
private class NetChangeBroadCastReceive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
/**
* networkInfo.isAvailable();
* 是否有网络连接
*/
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "网络连接正常", Toast.LENGTH_SHORT).show();
castContentDesc.setText("网络连接正常");
} else {
Toast.makeText(context, "网络连接失败", Toast.LENGTH_SHORT).show();
castContentDesc.setText("网络连接失败");
}
}
}
3,权限添加
自己经历千心万苦而酿造出来的生活之蜜,肯定比轻而易举拿来
的更有滋味!