Android8.0及以上版本自定义广播无法发送的问题

本文深入解析了Android8.0及以上版本中对广播机制的限制,特别是对于隐式广播的处理方式。介绍了如何在同一个包内及跨包发送和接收广播的具体实现方法,包括使用ComponentName设置接收者和在Intent中添加特定标志。

开发环境:Android Studio

虚拟机:android 9.0

Android8.0及以上系统关于广播的规定:对隐式广播做了限定,如果targetSdkVersion >=26,在Manifest里面注册的Receiver可能无法接收到广播消息

如果是再同一个包内接收广播,在发送广播时需要添加接收的广播的完整路径和类名,
查看ComponentName类的源码,该类的介绍上说明要设置接收类所在的包名和类名

在使用Intent时需要为intent添加ComponentName,代码如下:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Intent intent = new Intent("MY_BROADCAST");
                intent.setComponent(new ComponentName("com.example.broadcasttest",
                        "com.example.broadcasttest.MyBroadcastReceiver"));
                sendBroadcast(intent);
            }
        });
    }
}

如果是需要在不同的包里接收,两个及以上的module,需要修改代码如下:

 @Override
 public void onClick(View view) {
       Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
       if(Build.VERSION.SDK_INT >= 26) {
            intent.addFlags(0x01000000);
       }
       sendBroadcast(intent);             
 }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值