接收系统广播:
动态注册:
创建IntentFilter实例,调用IntentFilter的addAction(String action)方法添加要接收的广播内容。
然后调用registerReceiver(Class,IntentFilter)注册广播,方法的第一个参数是广播的监听类。
创建一个继承BroadcastReceiver的广播监听类。重写onReceiver(Context context,Intent intent)方法。
注意,注册了监听类,最后要取消注册,所以重写onDestroy()方法,调用unregisterReciever(Class)方法。
静态注册:
在AndroidMenifest.xml文件中注册
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intentFilter>
<action= android:name="android.intent.action.BOOT_COMPLETED"/> //开机启动广播
</IntentFilter>
</receiver>
发送自定义广播:
类似于静态接收系统广播,不同的是要加一条发送广播命令,且在AndroidManifest中改自定义广播内容为要接收的广播。代码如下:
MainActivity.class:
Intent intent;
intent=new Intent("MyBroadcast");
sendBroadcast(intents);
Broadcast.class:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class Broadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context,"MyBroadcast!",Toast.LENGTH_SHORT).show();
}
}
AndroidMenifest.xml:
<receiver
android:name=".Broadcast"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="MyBroadcast"/>
</intent-filter>
</receiver>
类似于发送自定义广播,不同的是把发送广播的方法改为sendOrderBroadcast; 且在AndroidManifest中设置优先级,可以在接收器中阻断广播的继续传播。代码如下:
ActivityMain.class:
Intent intents=new Intent("MyBroadcast");
sendOrderedBroadcast(intents,null); //发送有序广播sendOrderedBroadcast(Intent intent,String receiverPermission)
Broadcast.class:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class Broadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context,"MyBroadcast!",Toast.LENGTH_SHORT).show();
abortBroadcast(); //阻断广播的继续传播
}
}
AndroidManifest.xml:
<receiver
android:name=".Broadcast"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="MyBroadcast"/>
</intent-filter>
</receiver>
本地广播:
本地广播可以保护广播不被外部应用截获。
先获取本地广播监听器实例,再给IntentFilter添加广播内容,然后注册广播管理器。
编写一个继承于BroadcastReceiver的监听器类,里面编写收到广播后要执行的操作,最后发送广播。
LocalManager localManager=LocalManager.getInstance();
Intent intent=new Intent("MyBroadcast");
localManager.sendBroadcast(intent);
BroadCastReceiver
是接收sendBroacast()方法发送广播的基类
当注册了广播监听器后,要在Activity.onPause中取消注册,而不能在Activity.OnSaveInstanceState(当用户返回历史堆栈时该方法不会被调用)中取消,
普通广播:完全异步,但不能被使用结果(即不能将结果传送给下一个接收者)或中断广播
有时普通广播也会只发送给一个接收者,但仍然保持普通广播的特性:结果不能被使用,不能被中断
有序广播:一次只能给一个接收者发送广播,且可以将结果传给下一个接收者,也可以中断该广播的传播。其优先顺序由Android:priority设置,值越大优先程度越高,当值相同时将随机选择。
BroadcastReceiver无法查看和捕获startActivity使用的Intent,启动Activity的是前台操作,而广播的Intent则是后台操作
ConnectivityManager
与网络状态有关的类,当网络发生变化时会通知应用程序,其通过ConnectivityManager.getSystemService(Context,CONECTIVITY_SERVICE)实例化
NetworkInfo
描述网络接口的状态,通过getActivityNetworkInfo()(该方法为ConnectivityManager对象的方法)来获取实例