zoukankan      html  css  js  c++  java
  • 【Android异常】关于静态注册BroadcastReceiver接收不到自定义广播的问题

    Android 8.0以上需要setComponent()来指定包名和类名,第1个参数是指接收广播类的包名,第2个参数是指接收广播类的完整类名。
    静态广播
    1.先使用Android Studio创建一个广播接收类。File->New->Other->Broadcast Receiver,先创建一个广播类,这个创建的类会自动帮我们继承BroadcastReceiver类,接收广播,需要继承这个类。

    • MyReceiver.java
    public class MyReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            Toast.makeText(context, "收到广播", Toast.LENGTH_SHORT).show();
        }
    }

    上面的代码,很简单,就是在接收到广播时,弹出一个toast提示框。


    2.发送广播
    在界面上添加一个Button按钮,然后编写按钮的onclick事件。

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button btn1=findViewById(R.id.btn1);
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent=new Intent();
              intent.setAction("com.example.learnbroadcast.MY_Action");
                    intent.setComponent(new ComponentName("com.example.learnbroadcast","com.example.learnbroadcast.MyReceiver"));
    // 上面这一行在Android 7.0及以下版本不是必须的,但是Android 8.0或者更高版本,发送广播的条件更加严苛,必须添加这一行内容。
    // 创建的ComponentName实例化对象有两个参数,第1个参数是指接收广播类的包名,第2个参数是指接收广播类的完整类名。
                   sendBroadcast(intent);
                }
            });
        }
    }
  • 相关阅读:
    Django之模板
    Django之视图
    Django之web框架和url路由
    SpringBoot整合Druid数据源
    SpringBoot整合定时任务异步任务
    逐行解读HashMap源码
    SpringBoot通过RedisTemplate执行Lua脚本
    SpringBoot使用H2内嵌数据库
    SpringBoot如何使用拦截器
    SpringBoot热部署的实现方式
  • 原文地址:https://www.cnblogs.com/zFrankie/p/14391738.html
Copyright © 2011-2022 走看看