工作内容:
1.自定义广播的使用(静态注册和动态注册)
2.获取系统广播(电量的广播)
3.获取开机广播
4.获取系统网路状态广播(静态/动态注册)
5.Timer的使用
学习分享:下面代码:先讲解自定义广播的静态注册,动态注册,之后才讲发送广播
实例1:自定义广播(静态注册)
在AndroidManifest中添加下面代码(与activity同级)
<receiver android:name=".activity.MyReceiver1"
>
<intent-filter>
<!--设置过滤为321-->
<action android:name="321"></action>
</intent-filter>
</receiver>
这样就完成了一个MyReceiver的静态注册,在这个自定义类里面的onReceive()中就可以收到action为321的广播
/** * Created by Administrator on 2016/8/15. * 自定义广播类 */ public class MyReceiver extends BroadcastReceiver { /** * 收到广播后的处理 * @param context * @param intent 根据intent携带的action处理相应的逻辑 */ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"收到"+intent.getAction(),Toast.LENGTH_SHORT).show(); } }
(动态注册)——是指在Java代码中写它的过滤,并调用registerReceiver()方法完成注册,【需在onDestroy()方法中调用unregisterReceiver()销毁其注册】
//生成一个自定义广播接收器对象
MyReceiver receiver = new MyReceiver();
//生成一个intent过滤器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
//动态注册广播
registerReceiver(receiver,intentFilter);
在onDestrory()方法中取消注册:
protected void onDestroy() {
//取消注册
unregisterReceiver(receiver);
super.onDestroy();
}
获取系统广播——(系统电源广播)
1.IntentFilter intentFilter = new IntentFilter()
2.intentFilter.addAction(Intent.ACTION_BATTERY_CHANGE)
3.在registerReceiver(myBroadCastReceiver myReceiver,IntentFilter intentFilter)
获取开机广播——与service前台执行notification可以开始时运行在通知栏
1.设置权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
2.设置静态注册广播
<!--开机启动广播-->
<receiver android:name=".MyBroatcast">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
3.接收开机启动广播
【运行于通知栏的service】
//接收开机启动的广播
public class MyBroatcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//启动一条服务(运行于通知栏)
Intent intent1 = new Intent(context,MyService.class);
context.startService(intent1);
}
}
4.只需在自定义广播myBroadCastReceiver中的onReceive方法里写入获取广播的参数
例1:获取当前的电量值按百分比:0-100
int batteryLevelNow = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0)
例2:获取当前的电池的状态:2—充电,3—用电
int batteryLevelNow = intent.getIntExtra(BatteryManager.EXTRA_STATUS,0)
例3:
获取网路状态的自定义广播
//接收网路状态的广播
public class MyBroatcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LogD.d("网路状态改变"+intent.getAction());
ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);//2G/3G/4G链接
NetworkInfo wifiNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);//WIFI链接
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
LogD.d("没有网路");
}else {
LogD.d("网络正常");
}
}
}
xml中注册:
<receiver android:name=".MyBroatcast">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
动态注册(记得在onDestory中使用unregisterReceiver())
public class SecoundActivity extends AppCompatActivity {
TextView textView;
MyBroatcast broatcast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secound);
textView = (TextView) findViewById(R.id.textView2);
//动态注册接收网络状态广播
broatcast = new MyBroatcast();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(broatcast,filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broatcast);
}
}
Timer的使用
final Timer timer = new Timer(); TimerTask timerTask = new TimerTask() { @Override public void run() { //逻辑处理代码块 } }; timer.schedule(timerTask,50,50);//执行timerTask,50毫秒之后执行,每隔50毫秒执行一次,重复执行