《第一行代码》(第二版)广播的问题及其解决_代码里的广播错误-程序员宅基地

技术标签: java  android studio  

1)5.2.1弹出两次已连接或者未连接

        这是因为你同时打开了流量和WiFi,他就会发出两次广播。

2)5.3.1中发送自定义广播问题

标准广播未能弹出消息:

Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);

上述已经失效了。

修改:

Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
intent.setPackage("com.example.broadcasttest");
sendBroadcast(intent);

原因:

        若App的TargetSDK达到了26, 我们正常静态注册的广播就没有用了。能用的仅有以下豁免的Broadcast, 包括我们自己正常发广播,如果不指定包名, 静态注册的也是收不到的。PS:动态注册是没有影响的。

3)5.3.2发送有序广播时同样的问题

         BroadcastTest2接收不到标准广播,未能弹出"received in AnotherBroadcastReceiver"

解决办法:

        在发送广播中的那个MainActivity中修改

Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");
intent.setPackage("com.example.broadcasttest");
sendBroadcast(intent);
Intent intent2=new Intent("com.example.broadcasttest.MY_BROADCAST");
intent2.setPackage("com.example.broadcasttest2");
sendBroadcast(intent2);

原因:

                依然是因为静态注册未指定包名;

 4)截断广播

        静态注册的广播不知道能不能截断,但是似乎说是失效了,只能截断动态注册广播。此时我们就会换成动态注册,以后也尽量使用动态注册。也不需要带上setPackage就能发送了,简单多了。

 private IntentFilter intentFilter;

    private MyBroadcastReceiver myBroadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button =  findViewById(R.id.button);

        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
        intentFilter.setPriority(100);
        myBroadcastReceiver = new MyBroadcastReceiver();
        registerReceiver(myBroadcastReceiver,intentFilter);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
//                intent.setPackage("com.example.mybroadcastreceiver");
                sendOrderedBroadcast(intent,null);
//                Intent intent2 = new Intent("com.example.broadcasttest.MY_BROADCAST");
//                intent2.setPackage("com.example.broadcasttest2");
//                sendOrderedBroadcast(intent2,null);
            }
        });
intentFilter.setPriority(100);

设置优先级,优先级高的先播出。

如果需要截断,就是不向下继续传递广播,就可以在该广播中写如:

abortBroadcast();

 

以上我将学习《第一行代码》(第二版)广播因代码失效改进的问题。

本文章借鉴如下博客:

这个是原因,但是其中的代码我没有成功实现。

(5条消息) 《第一行代码2》的5.3.1节,发送标准广播后没有弹出提示消息_qq_42332046的博客-程序员宅基地

以下是成功实现的代码原博客:

(5条消息) Android 第一行代码(第二版) 发送标准广播无效 接受不到_明道_N的博客-程序员宅基地 

(5条消息) 第一行代码5.3有序广播_昵称不能为——的博客-程序员宅基地

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_61505916/article/details/123693669

智能推荐

邵奈一的技术博客导航-程序员宅基地

文章浏览阅读9.2k次,点赞13次,收藏37次。导航我的博客,整理出来,方便导航~_邵奈一的技术博客导航

读Zepto源码之Touch模块_zepto 引入touch模块-程序员宅基地

文章浏览阅读736次。大家都知道,因为历史原因,移动端上的点击事件会有 300ms 左右的延迟,Zepto 的 touch 模块解决的就是移动端点击延迟的问题,同时也提供了滑动的 swipe 事件。读 Zepto 源码系列文章已经放到了github上,欢迎star: reading-zepto源码版本本文阅读的源码为 zepto1.2.0GitBook《reading-zepto》实现的事件;['swipe', 'swi_zepto 引入touch模块

Linux 获取CPU温度_msr怎么读取功耗-程序员宅基地

文章浏览阅读9.2k次。如何在linux中取得CPU温度呢?Centos系列yum install lm_sensorssensors-detectsensorsUbuntu系列(多了service module-init-tools start一步骤)apt-get install lm-sensorssensors-detectservice module-init-tools_msr怎么读取功耗

Lifting Walls 解题报告 Kattis 暴力求解法_walls题解-程序员宅基地

文章浏览阅读572次。题意: 给出墙的四面的边长,给出 所有 挖掘机的作业半径以及位置。 其中墙的几何中心就是坐标的原点。 需要特别注意的是:挖掘机覆盖的是“墙的边长上的中点” 最后要求的是给出可以覆盖这四个点最少的挖掘机的数目。 解题思路: 这个题目如果通过枚举就是2的n次方,其中n为挖掘机数目。因为每个挖掘机有两个状态:用 或者 不用。所以是指数级,会爆。 考虑另一种暴力求解方法: **实现考虑题目中_walls题解

Java Object转long-程序员宅基地

文章浏览阅读4.3k次。1、方法一:_object转long

gson无法正常将时间戳转化成date_gson 时间戳转date-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏5次。gson无法正常将时间戳转化成dategson将时间戳转化成date时,报错Failed to parse date ["1551950239757']: Invalid time zone indicator '3'解决办法添加一个long转date的解析器 @Test public void fun1(){ GsonBuilder builder = ne..._gson 时间戳转date

随便推点

android 斜边,如何通过软键盘android系统限制我的EditText输入像反斜线一些特殊字符(/),tild(〜)等编程...-程序员宅基地

文章浏览阅读58次。I am developing an application for keyboard, but i am geting an issue.I want to restrict/block some special character from soft keyboard in EditText in android programmatically.So, Is there any way i ..._android 不可输入斜杠

基于Maven的SSM框架的搭建(Spring+SpringMVC+MyBatis)_代码先写controller还是mapper-程序员宅基地

文章浏览阅读343次。之前做项目都是使用别人搭建好的框架,今天自己来亲自搭一下基于maven的SSM框架。首先在pom.xml中添加需要的依赖: junit junit 3.8.1 test org.springframework spring-core ${spring.version} org.springframew_代码先写controller还是mapper

Linux命令(99)之rz_linux rz-程序员宅基地

文章浏览阅读5.3k次。linux命令之rz介绍_linux rz

SQL Server System Session ID是不是1-50?-程序员宅基地

文章浏览阅读149次。今天在论坛看到一篇文章问到为什么SQL Server系统的SESSION ID是从1到50的,以前看过文章,这些Session是SQL Server为了运行系统活动比如((lazy writer, ghost record cleanup, DTC commit/abort),所以会保留50 Session ID给SQL Server使用,用户会话从51..._sql server 有多少个session

Python-OpenCV-- 台式机外接摄像头EAST文本检测+OCR识别_(offsetx, offsety) = (x * 4.0, y * 4.0)-程序员宅基地

文章浏览阅读677次。利用 OpenCV 的 EAST 文本检测器定位图像中的文本区域。 提取每个文本 ROI,然后使用 OpenCV 和 Tesseract v4 进行文本识别。from imutils.object_detection import non_max_suppressionfrom PIL import Imageimport numpy as npimport pytesseractimport timeimport cv2from matplotlib import pyplot ..._(offsetx, offsety) = (x * 4.0, y * 4.0)

【Zookeeper】实现负载均衡原理-程序员宅基地

文章浏览阅读282次。一、思路使用Zookeeper实现负载均衡原理,服务器端将启动的服务注册到,zk注册中心上,采用临时节点。客户端从zk节点上获取最新服务节点信息,本地使用负载均衡算法,随机分配服务器。服务端启动的时候 会想注册中心Zookeeper中添加节点,(注意这个节点是临时的,目的是如果服务端关闭连接的时候,该结点会自动删除)客户端会查询注册中心里面的节点信息,拿到对应的地址和端口号,使..._通过zookeeper连接hive是如何负载均衡的