Android本地广播的使用

Android本地广播的使用,第1张

为了解决广播的安全性问题,Android引入了本地广播机制,使用该机制发出的广播只能在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。

本地广播是无法通过静态注册的方式来接收的。我们知道静态注册主要是为了在程序未启动的情况下能接收广播,而当我们发送本地广播的时候,程序肯定是已经启动的了,所以我们需要动态注册方式创建接收器。

在这里我们创建一个继承于BroadcastReceiver的类LocalReceiver。onReceive()处理你接收到的广播内容,在这里我用Toast来创建一个提示接收到消息的d窗

在activity_main.xml文件创建一个用于发送广播的按钮

首先通过本地广播管理器LocalBroadcastManager的getInstance()方法获取一个实例,并分别创建过滤器IntentFilter和自定义接收器LocalReceiver的实例。给IntentFilter的实例添加一个action:localbroadcast(接收的广播的名称),然后调用LocalBroadcastManager的registerReceiver()方法进行注册,并将LocalReceiver的实例和IntentFilter的实例都传进去。这样本地监听器就创建完成了。

调用LocalBroadcastManager的sendBroadcast()发送本地广播。运行程序,点击Send Button按钮,我们可以看到d窗显示“This is in LocalReceiver”,说明本地广播发送和接收成功了。

当然,我们最后一定不要忘了取消注册。我们可以通过调用unregisterReceiver()方法来实现。至此,Android的标准广播发送就完成了。

1.发送的广播只能在本程序内传递,不必担心数据泄露

2.其它程序广播无法发送到本程序的内部,不必担心安全漏洞隐患

3.本地广播比系统全局广播更加高效

是的,在 Android 中有按键广播(KeyEvent)。按键广播是一种广播类型,用于接收系统发出的按键事件。当用户按下按键时,系统会将该按键的信息打包成 KeyEvent 类型的广播,然后发送出去。我们可以通过注册 BroadcastReceiver 来接收这些广播,并在应用程序中处理按键事件。

要接收按键广播,需要在 AndroidManifest.xml 文件中声明相应的权限和过滤器,并创建一个 BroadcastReceiver 子类来处理接收到的广播。

例如,在 AndroidManifest.xml 文件中添加以下声明:

```

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name=".MyKeyReceiver">

<intent-filter>

<action android:name="android.intent.action.MEDIA_BUTTON" />

</intent-filter>

</receiver>

```

其中,我们声明了 RECEIVE_BOOT_COMPLETED 权限以及一个 BroadcastReceiver 子类 MyKeyReceiver,同时过滤了 MEDIA_BUTTON 广播。

然后,在 MyKeyReceiver 中实现 onReceive 方法,即可处理接收到的按键广播。

```

public class MyKeyReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// 处理接收到的按键广播

if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {

// 获取按键事件信息

KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT)

if (event != null) {

// 处理 KeyEvent 信息

}

}

}

}

```

在上述代码中,我们判断接收到的广播是否为 MEDIA_BUTTON 广播,如果是,则获取 KeyEvent 信息,并进行相应处理。

需要注意的是,Android 平台上的不同设备可能会存在一些差异,因此可能需要根据具体情况进行调整。

首先写一个类要继承BroadcastReceiver\x0d\x0a第一种:在清单文件中声明,添加\x0d\x0a\x0d\x0a \x0d\x0a\x0d\x0a\x0d\x0a第二种使用代码进行注册如:\x0d\x0aIntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED")\x0d\x0aIncomingSMSReceiver receiver = new IncomgSMSReceiver()\x0d\x0aregisterReceiver(receiver.filter)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11194481.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存