You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 14中RECEIVER_NOT_EXPORTED本地广播接收器无法接收广播问题

Android 14中RECEIVER_NOT_EXPORTED接收器无法接收广播的解决方案

问题出在你发送广播的方式上:你发送的是无包名限制的隐式全局广播,而Android 14对RECEIVER_NOT_EXPORTED类型的接收器有严格限制——这类接收器仅允许接收本应用内部的广播,无法接收未指定目标应用的隐式全局广播。

解决方法

方法1:发送广播时指定本应用包名

修改发送广播的代码,给Intent添加当前应用的包名,确保广播仅发送给本应用内的接收器:

binding.button.setOnClickListener {
    Intent("com.nama.action").also { intent ->
        intent.putExtra("nama", dashboardViewModel.text.value)
        // 指定当前应用包名,限定广播接收范围
        intent.setPackage(requireContext().packageName)
        requireContext().sendBroadcast(intent)
    }
}

方法2:使用显式Intent指定接收器(适用于明确知道接收器类的场景)

直接通过接收器类创建Intent,让广播精准指向目标接收器:

binding.button.setOnClickListener {
    Intent(requireContext(), MyBroadcastReceiver::class.java).also { intent ->
        intent.action = "com.nama.action"
        intent.putExtra("nama", dashboardViewModel.text.value)
        requireContext().sendBroadcast(intent)
    }
}

额外注意事项

你的代码存在内存泄漏风险:动态注册的广播接收器未在Fragment销毁时注销。需要将接收器改为Fragment成员变量,并在onDestroyView中注销:

class DashboardFragment : Fragment() {
    private var _binding: FragmentDashboardBinding? = null
    private val binding get() = _binding!!
    // 声明为成员变量
    private lateinit var br: BroadcastReceiver

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        // ... 其他代码 ...
        
        // 初始化接收器并注册
        br = MyBroadcastReceiver()
        val filter = IntentFilter("com.nama.action")
        ContextCompat.registerReceiver(requireContext().applicationContext, br, filter, ContextCompat.RECEIVER_NOT_EXPORTED)
        
        return root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        // 注销接收器
        ContextCompat.unregisterReceiver(requireContext().applicationContext, br)
        _binding = null
    }
}

内容的提问来源于stack exchange,提问作者Srikanth Nama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:34:53