戏说江湖静如水,游荡江湖才有情。我就是江湖中的一个戏子。
俗话说,入行先入门。作为一名android学习者,四大组件是android中的核心组件,岂有不学之理。然而,本人才疏学浅,叙述略有不当之处,敬请谅解。
BroadcastReceiver在android开发中使用的频率也是蛮高的,主要的作用来接受系统广播或者用户广播,然后进行相应的处理,很像我们生活中的广播。
-
类别
- 普通广播
对于多个接受者来说是完全异步的,每个接受者无需等待就可以接受到广播,并且接受者之间不会有任何影响。这种广播,接受者无法终止广播,也无法阻止其他接受者的接收动作。
- 有序广播
有序广播每次只能发送到优先级较高的接接收者哪里,然后由优先级高的接收者传播到优先级低的接收者那里,并且优先级高的接收者能够终止这个广播。
需要定义权限,在必要时来终止权限
<permission android:protectionLevel="normal" android:name="scott.permission.BROADCAST_PERMISSION"/>
然后声明使用了该权限
<uses-permission android:name="scott.permission.BROADCAST_PERMISSION"
-
使用方法
- 继承android.content.BroadcastReceiver
- 实现其onReceiver方法
- 静态注册
<action android:name="andorid.intent.action.BROADCAST"/>
- 动态注册
IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.BROADCAST");
相关案例使用
- 开机启动服务
- 注册广播来接收开机启动广播,并启动自己的服务
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent bootIntent = new Intent(context,BootCompleteService.class);
context.startService(bootIntent);
}
}
- 实现自己的服务
public class BootCompleteService extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
- 配置相关信息
<receiver android:name=".BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
<service android:name=".BootCompleteService"/>
- 声明使用权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- 网络状态变化
- 接收网络改变广播
public class NetworkStateReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(isNetworkAvailable(context)){
Toast.makeText(context,"network is disconnect",Toast.LENGTH_SHORT);
}
}
public static boolean isNetworkAvailable(Context context){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] info = cm.getAllNetworkInfo();
if (info != null) {
for (int i = 0;i < info.length;i++){
if(info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
}
- 配置相关信息
<receiver android:name=".NetworkStateReciver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
- 声明使用权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- 电量变化
- 接收电量信息
public class BatteryChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE,1);
int precent = currentLevel * 100 / total;
//TODO:you want to do
}
}
- 配置相关信息
<receiver android:name=".BatteryChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
- 声明使用权限
<uses-permission android:name="android.permission.BATTERY_STATS"/>
- 立即获得电量信息
Intent batteryIntent = getApplicationContext().registerReceiver(null,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int currentLevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
int totalLevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE,1);
int precent = currentLevel * 100 / totalLevel;
上述很简单的描述了BroadcastReceiver的使用方法和相关的案例,你是否又get到了呢?
网友评论