Day13 Broadcast & Service
Broadcast 广播
- 基本步骤
- 权限
- 广播类型
- 内部、外部Receiver
Service 服务
Broadcast
- 基本步骤
- 权限
- 广播类型
- 内部、外部Receiver
- 本地、系统广播
- 常用系统广播
基本步骤
接收系统广播(三大要素:广播的Action、接收广播的权限、广播中包含的数据)
1)自定义广播接收器类,继承BroadcastReceiver,并重写onReceive()方法
2)注册广播接收器,同时通过IntentFilter声明广播接收器可以接收的广播频道(Action)
3) 在广播接收的方法中,实现相关的操作(注:在UI线程中执行的)
//注册广播接收器
registerReceiver(BroadcastReciver, IntentFilter)
//自定义广播接收器
class MyReciver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//接收到广播后执行的代码
}
}
权限
在XML配置文件中声明和使用权限
在java代码中发送带有权限的广播
<!-- 定义权限 -->
<permission android:name="com.qf.permission.print" />
<!-- 使用权限 -->
<uses-permission android:name="com.qf.permission.print" />
<!-- android:permission 设置接收的广播是带有权限的(发送广播端必须使用此权限)
android:exported="false" 不接收外部应用发送的广播 -->
<receiver
android:name="com.qf.broadcastreceiver04.MyReceiver03"
android:permission="com.qf.permission.print"
android:exported="false" >
<!-- 通过priority属性设置接收广播的优先级(范围: -1000~1000) -->
<intent-filter android:priority="100" >
<action android:name="com.qf.broadcast.print" />
</intent-filter>
</receiver>
//发送权限广播
sendBroadcast(Intent(ACTION), Pomission);
//注册特定权限的接收器
registBroadcast(Intent, Pomission);
广播类型
//发送普通广播
sendBroadcast(new Intent(Config.ACTION_PRINT));
//发送有序广播
sendOrderedBroadcast(new Intent(Config.ACTION_PRINT),Config.PERMISSION);
//发送权限广播
sendOrderedBroadcast(new Intent(Config.ACTION_PRINT),Config.PERMISSION);
//指定包名的广播(通过Intent)
Intent.setPackage(String Package)
内部、外部Receiver注意
内部类形式的Receiver需要在代码中注册
外部类形式的Receiver需要在XML配置中声明
本地、系统广播
本地广播 LocalBroadcastManager
所在包:android.support.v4.content
- LocalBroadcastManager.getInstance(Context)
- registReceiver(BroadcastReceiver,IntentFilter)
- sendBroadcast(Intent)
- sendBroadcastSync(Intent intent)
- unregisterReceiver(BroadcastReceiver receiver)
常用系统广播
注意:系统广播要严格按照官方API的说明方式使用
- Intent.ACTION_BOOT_COMPLETED 系统开机启动完成
- Intent.ACTION_SHUTDOWN 关机提醒广播
- Intent.ACTION_BATTERY_LOW 低电量提醒广播
- Intent.ACTION_BATTERY_CHANGED 电量发生变化广播 ==(仅支持代码中注册)==
- Intent.ACTION_SCREEN_OFF 屏幕被关闭
- Intent.ACTION_SCREEN_ON 屏幕已经被打开
- Intent.ACTION_USER_PRESENT 屏幕解锁广播
- Intent.ACTION_NEW_OUTGOING_CALL 拨号广播
- TelephonyManager.ACTION_PHONE_STATE_CHANGED 来电时电话状态变化广播,如响玲、空置、挂断
- Telephony.Sms.Intents.SMS_RECEIVED_ACTION 接收短信的广播
Service 服务
- 概念
- 生命周期
- 基本使用方法
概念
运行在后台的服务,所谓后台即没有界页;作为四大组件之一,其是运行在主线程中的
生命周期方法
- ==
onCreate()
== - ==
onStartCommand
== - ==
onDestroy()
== - ==
onBind()
==
public void onCreate() {
//只执行一次,用于初始化Service
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 每次启动Service都会执行的方法,在此实现核心的功能
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
//只执行一次,用于销毁Service组件
super.onDestroy();
Log.i("debug", "onDestroy");
}
@Override
public IBinder onBind(Intent intent) {
//必须实现的方法,保持空即可
return null;
}
基本使用方法
1) 创建Service子类,并重写三个核心的生命周期方法
* onCreate()
* onStartCommand()
* onDestroy()
注:必须实现onBind()抽象方法,此方法是用于绑定服务组件时使用,startService方式无须实现其功能。2) 注册Service组件–manifest文件中注册
3) 启动和停止Service组件
//创建意图
Intent serviceIntent=new Intent(getApplicationContext(),MyService.class);
//启动服务
startService(serviceIntent);
//关闭服务
stopService(serviceIntent);
<!-- 注册Service组件 -->
<service android:name="com.qf.service01.MyService"/>