Android学习笔记 13 Broadcast & Service(part.1)

来源:互联网 发布:mama颁奖典礼投票软件 编辑:程序博客网 时间:2024/06/06 13:04

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"/>
0 0
原创粉丝点击