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

开发环境: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);             
 }
发布了14 篇原创文章 · 获赞 5 · 访问量 2593

猜你喜欢

转载自blog.csdn.net/XingTina/article/details/101304580