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

本文详细解析了Android应用开发中广播与服务的使用方法,包括权限、类型、注册流程以及如何接收系统广播。同时介绍了服务的生命周期管理和基本使用方法,帮助开发者更好地掌握后台服务的构建与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值