
本地广播是无法通过静态注册的方式来接收的。我们知道静态注册主要是为了在程序未启动的情况下能接收广播,而当我们发送本地广播的时候,程序肯定是已经启动的了,所以我们需要动态注册方式创建接收器。
在这里我们创建一个继承于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)欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)