《第一行代码》(第二版)广播的问题及其解决

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的博客-CSDN博客

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

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

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

### 关于《第一行代码 Android 第3》的目录 以下是基于已知参考资料整理的《第一行代码 Android 第3》的大致章节结构[^1]: #### 前言 - 介绍Android的发展历程及其重要性。 #### 第一部分:基础知识 1. **Android开发环境搭建** - 安装配置Android Studio。 - 创建第一个Android项目。 2. **UI界面设计基础** - 使用XML布局文件创建简单的用户界面。 - 控件的基本属性设置与事件处理机制。 3. **Activity与Fragment** - Activity生命周期详解。 - Fragment的概念及使用场景。 #### 第二部分:核心功能实现 4. **数据存储技术** - SharedPreferences的应用。 - 文件操作与数据库SQLite简介。 5. **网络请求与JSON解析** - HTTP协议基本概念。 - 利用OkHttp库完成GET/POST请求并解析返回的数据。 6. **多媒体应用开发** - 音频视频播放器的设计思路。 - 图片加载框架Glide/Fresco集成方法。 #### 第三部分:高级特性探讨 7. **服务(Service)广播(BroadcastReceiver)** - 后台运行的服务类型区分。 - 广播接收器注册方式对比分析。 8. **通知(Notification)与定位(Location)** - 自定义样式的通知栏消息展示技巧。 - GPS/Wi-Fi混合模式下的地理位置获取策略。 9. **权限管理与安全防护** - 动态申请危险级别权限流程说明。 - 数据加密传输方案推荐。 #### 第四部分:综合案例实践 10. **天气预报APP制作全流程讲解** - API接口调用封装逻辑梳理。 - UI组件动态更新效果实现细节剖析。 11. **聊天室即时通讯系统原型构建** - WebSocket实时通信协议入门指导。 - RecyclerView列表项优化措施总结。 --- ```python # 示例代码片段:通过Python模拟爬取图书信息(仅供演示) import requests from bs4 import BeautifulSoup def fetch_book_toc(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') toc_elements = soup.find_all('h2') # 假设目录位于<h2>标签下 return [element.text.strip() for element in toc_elements] url = "https://example.com/android-first-code" print(fetch_book_toc(url)) ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值