Android 13 (API 33)上自定义广播

在 Android 13 (API 33) 及更高版本上,由于 Google 对隐式广播和安全性进行了严格限制,我们需要使用最佳实践来确保自定义广播的完整性和可靠性。下面是一个完整的自定义显式广播示例,包括 Kotlin 接收器代码、AndroidManifest.xml 配置以及 adb 测试命令。

🛠️ Android 13 自定义显式广播示例

1. 定义常量 (Constants)

在一个 Kotlin 文件中定义 Action 名称和所需的权限。

Kotlin

// Constants.kt

const val ACTION_CUSTOM_REFRESH = "com.example.action.CUSTOM_REFRESH"

const val EXTRA_DATA_KEY = "data_payload"

2. 编写 BroadcastReceiver (Kotlin)

这是接收广播并处理逻辑的核心类。

kotlin 复制代码
// CustomDataReceiver.kt  
package com.example.myautomotiveapp  
  
import android.content.BroadcastReceiver  
import android.content.Context  
import android.content.Intent  
import android.util.Log  
  
class CustomDataReceiver : BroadcastReceiver() {  
  
    private val TAG = "CustomReceiver"  
  
    override fun onReceive(context: Context?, intent: Intent?) {  
        // 必须检查 Intent 是否为 null  
        if (intent == null) return  
  
        val action = intent.action  
         
        // 1. 检查 Action 是否匹配  
        if (action == ACTION_CUSTOM_REFRESH) {  
             
            // 2. 提取附加数据  
            val payload = intent.getStringExtra(EXTRA_DATA_KEY)  
             
            Log.d(TAG, "✅ 接收到自定义广播: $ACTION_CUSTOM_REFRESH")  
            Log.d(TAG, "   接收到的数据 Payload: $payload")  
  
            // 3. 执行应用逻辑 (例如:刷新 UI, 更新数据)  
            // if (payload == "full_sync") { /* 执行同步操作 */ }  
             
            // 4. (可选) 如果是耗时操作,通常会启动一个 JobIntentService 或 WorkManager  
        } else {  
            Log.w(TAG, "接收到不匹配的 Action: $action")  
        }  
    }  
}  

3. 配置 Manifest (AndroidManifest.xml)

在 Android 13 上,必须明确设置 android:exported 属性,以便接收来自系统或外部(adb)的广播。

ini 复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android">  
    <application>  
         
        <receiver  
            android:name=".CustomDataReceiver"  
            android:enabled="true"  
            android:exported="true"> <intent-filter>  
                <action android:name="com.example.action.CUSTOM_REFRESH" />  
            </intent-filter>  
        </receiver>  
         
    </application>  
</manifest>  

4. 使用 ADB 命令测试广播

现在,您可以使用 adb shell am broadcast 命令来模拟外部系统发送广播。

A. 准备命令参数:

参数 含义
-a com.example.action.CUSTOM_REFRESH 指定 Action 名称
-p com.example.myautomotiveapp 关键: 指定目标应用的包名 (显式广播)
--es "data_payload" "full_sync" 发送一个名为 data_payload 的字符串附加数据

B. 执行命令:

请将 com.example.myautomotiveapp 替换为您应用的实际包名。

css 复制代码
adb shell am broadcast \  
    -a com.example.action.CUSTOM_REFRESH \  
    -p com.example.myautomotiveapp \  
    --es "data_payload" "full_sync"  

C. 验证结果:

在执行命令后,立即检查 Logcat。您应该能看到:1. ADB 输出: Broadcast completed: result=0

  1. Logcat 输出:
    代码段
    D/CustomReceiver: ✅ 接收到自定义广播: com.example.action.CUSTOM_REFRESH
    D/CustomReceiver: 接收到的数据 Payload: full_sync

如果 Logcat 出现了这些信息,说明您的自定义广播在 Android 13 上已完整工作。**

相关推荐
恋猫de小郭1 小时前
再次紧急修复,Flutter 针对 WebView 无法点击问题增加新的快速修复
android·前端·flutter
李慕婉学姐1 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
似霰4 小时前
传统 Hal 开发笔记6----App 访问硬件服务
android·framework·hal
爱装代码的小瓶子4 小时前
【c++知识铺子】封装map和set(详细版)
android·java·c++
私人珍藏库4 小时前
AutoGLM无需豆包手机,让AI自动帮你点外卖-刷视频
android·ai·智能手机·工具·软件·辅助·autoglm
孤舟簔笠翁5 小时前
【Android驱动14】Android系统Crash工具使用方法和分析
android
帅得不敢出门6 小时前
MTK Android11 APP调用OTA升级
android·java·开发语言·framework
2501_915909066 小时前
苹果应用加密方案的一种方法,在没有源码的前提下,如何处理 IPA 的安全问题
android·安全·ios·小程序·uni-app·iphone·webview
用户2018792831676 小时前
Android App 换肤原理:用 "装修小房子" 故事浅谈
android