android BroadcastReceiver 静态注册收不到消息

如果你静态注册的广播无法接收到消息,请先检查下:你的安卓版本是不是8.0+


前言
Google官方声明:Beginning with Android 8.0 (API level 26), the system imposes additional restrictions on manifest-declared receivers. If your app targets API level 26 or higher, you cannot use the manifest to declare a receiver for most implicit broadcasts (broadcasts that do not target your app specifically).
大概意思就是说:从android 8.0(API26)开始,对清单文件中静态注册广播接收者增加了限制,建议大家不要在清单文件中静态注册广播接收者。

其实说白点:就是因为在清单文件中静态注册广播接收者,容易让一些"不法分子"获取用户的隐私(如:电话监听、短信监听等等),所以google限制了静态注册(Android在保护用户隐私上坚持不懈的努力着...也许google还要其他的考虑吧。咱也不知道...咱也不敢问😁)


言归正传
虽然Google限制了清单文件中的静态注册方式,但是并不是说广播接收者的静态注册方式不能使用了!
那么该如何使用呢 ???(直接上代码说明)

清单文件 AndroidManifest.xml

 

        <!--在配置文件中:静态注册一个广播接收者-->
        <receiver android:name=".receiver.TestDemoReceiver">
            <!--定义一个意图过滤器来接收(监听)指定的action-->
            <intent-filter>
                <!--配置自定义的 action(事件类型)-->
                <action android:name="x.xx.xxx.xxx" />
            </intent-filter>

        </receiver>

广播接收者

 

public class TestDemoReceiver extends BroadcastReceiver {
   
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("onReceive", "我是广播接收者");
    }
}

应用中针对静态注册的广播接收者。发送广播的方式如下:

  • 向其他应用中静态注册的广播接收者发送广播

 

    //获取 Intent 对象
    Intent intent = new Intent();
    //使用隐式意图,为intent添加指定的广播事件类型
    intent.setAction("x.xx.xxx.xxx");
    //该方式适用:给其他应用的广播接收者发送消息(指定应用的包名、指定类的全类名)
    //intent.setComponent(new ComponentName("包名", "包名.receiver.TestDemoReceiver"));
    //intent.setClassName("包名", "包名.receiver.TestDemoReceiver");
    //发送广播
    sendBroadcast(intent);
  • 给本应用中静态注册的广播接收者发送广播

 

    //获取 Intent 对象
    Intent intent = new Intent();
    //使用隐式意图,为intent添加指定的广播事件类型
    intent.setAction("x.xx.xxx.xxx");
    //如果是给自身应用内广播接收者发送广播
    //intent.setComponent(new ComponentName(this, TestDemoReceiver.class));
    intent.setClassName(this,"包名.receiver.TestDemoReceiver");
    //发送广播
    sendBroadcast(intent);



作者:FuMing3
链接:https://www.jianshu.com/p/90c1ffa8def3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值