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 上已完整工作。**

相关推荐
来来走走2 小时前
Android开发(Kotlin) ViewModel基本用法
android·开发语言·kotlin
Digitally2 小时前
在荣耀手机上删除短信的完整指南
android
nono牛2 小时前
Android Binder C/C++ 层详解与实践
android·c语言·binder
Coder-coco3 小时前
个人健康系统|健康管理|基于java+Android+微信小程序的个人健康系统设计与实现(源码+数据库+文档)
android·java·vue.js·spring boot·微信小程序·论文·个人健康系统
kk哥88993 小时前
Android在kts中怎么使用AIDL
android
用户69371750013843 小时前
6.Kotlin 流程控制:循环控制:while 与 do/while
android·后端·kotlin
老华带你飞4 小时前
个人健康系统|健康管理|基于java+Android+微信小程序的个人健康系统设计与实现(源码+数据库+文档)
android·java·vue.js·微信小程序·论文·毕设·个人健康系统
2501_915909065 小时前
iOS App 测试工具全景指南,构建从开发、性能到系统级调试的多工具协同测试体系
android·测试工具·ios·小程序·uni-app·iphone·webview
钮钴禄·爱因斯晨5 小时前
Python常见的文件操作
android·数据库·python