0908Android基础四大组件之BroadcastReceiver

本文深入探讨了Android应用中广播的使用,包括自定义广播的创建、静态与动态注册方法,以及如何发送广播。通过实例展示了如何在应用中实现闹钟功能,以及在网络连接和软件删除时触发广播。文章还介绍了在Manifest文件中添加权限与action以实现特定的广播行为。
摘要由CSDN通过智能技术生成

BroadcastReceiver

  Android中的每个应用程序都可以对自己感兴趣的广播进行注册,这样程序就只会接收到自己关心的广播内容,可能来自于系统,可能来自于其他应用程序。
  Android中广播主要可以分为两种类型,标准广播和有序广播。
  标准广播,异步执行,广播发出后,所有的BroadcastReceiver几乎同时接收到广播消息,效率高,无法被截断。
  这里写图片描述

  有序广播则是一种同步执行,广播接收器按照优先级顺序接受广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播就无法接收到广播消息了。
  这里写图片描述

发送自定义广播

创建广播接收器

  发送自定义广播需要创建一个广播接收器,即新建一个类让他继承BroadcastReceiver,并重写父类中的onReceive()方法。当有广播到来时,onReceive()方法就会得到执行。

public class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("", "访问到了么= =");
        Toast.makeText(context,"收收收收收到广播",Toast.LENGTH_SHORT).show();
    }
}

注册广播

静态注册

这里写图片描述

动态注册

  在活动中添加代码如下

MyReciver mReciver=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.laowang.broad");
registerReceiver(mReciver,filter);

  动态注册系统广播需要再复写一个方法,解绑广播接收器,防止关闭时产生error

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(mReciver);
}

发送广播

  在活动中按键的点击事件中添加发送广播。

Intent intent=new Intent();
intent.setAction("com.laowang.broad");
sendBroadcast(intent);

这里写图片描述

闹钟DEMO

  在上面的基础上添加了俩个按钮,分别实现打开闹钟和关闭闹钟。实现的效果是,点击打开闹钟后,过五秒开始广播,每隔三秒广播一次。点击关闭闹钟来关闭广播。

打开闹钟
  Intent intent2=new Intent();
                intent2.setAction("com.laowang.broad");
                PendingIntent pendingIntent1=PendingIntent.getBroadcast(getApplication(),0x23,intent2,PendingIntent.FLAG_UPDATE_CURRENT);
                mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis()+5000,3000,pendingIntent1);
关闭闹钟
 Intent intent3=new Intent();
                intent3.setAction("com.laowang.broad");
                PendingIntent pendingIntent2=PendingIntent.getBroadcast(getApplication(),0x23,intent3,PendingIntent.FLAG_UPDATE_CURRENT);
                mAlarmManager.cancel(pendingIntent2);

网络连接和删除软件广播DEMO

  在动态注册广播的基础上面,在mainfest中添加权限以及action。实现的功能分别为,打开wlan连接时进行广播,以及删除软件时进行广播。

//权限
 <uses-permission android:name="ANDROID.PERMISSION.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.broadcast_package_removed"/>
//action
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
                <action android:name="ANDROID.INTENT.ACTION.PACKAGE_REMOVED"/>

  整个mainfest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.laowang.android0907" >
    <uses-permission android:name="ANDROID.PERMISSION.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.broadcast_package_removed"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".MyReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
                <action android:name="ANDROID.INTENT.ACTION.PACKAGE_REMOVED"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值