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

Android如何实现仅接收指定包名应用发送的广播?

接收端校验广播发送方包名的实现方案

前置修正:发送端代码错误修复

发送端原有代码中setPackage参数写了多余的package前缀和分号,会导致广播无法正常发送到接收端,修正后代码如下:

package com.sender.app;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   Intent intent = new Intent();
   intent.putExtra("version", BuildConfig.VERSION_NAME);
   intent.setAction("get.sender.app.version");
   // 修正setPackage参数,只填接收端包名即可
   intent.setPackage("com.receiver.app");
   intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
   sendBroadcast(intent);
}

核心实现:接收端添加包名校验逻辑

你可以直接在广播接收器的onReceive方法中获取广播发送方的包名,判断是否为指定的com.sender.app,仅匹配通过后再执行后续逻辑,兼容全Android版本的实现代码如下:

package com.receiver.app;
public class BroadcastReceiver_GetSenderAppVersion extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 校验发送方包名逻辑
        String senderPackage = null;
        // API 30及以上直接用系统提供的getSendingPackage方法
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
            senderPackage = getSendingPackage();
        } else {
            // 低版本通过发送方UID查询包名
            int senderUid = getSendingUid();
            if (senderUid >= 0) {
                String[] packages = context.getPackageManager().getPackagesForUid(senderUid);
                if (packages != null && packages.length > 0) {
                    senderPackage = packages[0];
                }
            }
        }
        // 仅当包名匹配、携带有效版本号时才展示Toast
        if ("com.sender.app".equals(senderPackage) 
            && intent.hasExtra("version") 
            && intent.getStringExtra("version") != null
            && intent.getStringExtra("version").length() > 0) {
            Toast.makeText(context, intent.getStringExtra("version"), Toast.LENGTH_LONG).show();
        }
    }
}

可选优化(安全性升级)

如果要避免包名伪造的风险,你可以额外校验发送端应用的签名,确保广播来源是官方的发送端应用。

内容的提问来源于stack exchange,提问作者Nikhil Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:27:05