Android广播发送应用的包名

标签 android android-intent broadcastreceiver

我知道 BroadcastReceiver 特性/功能在 Android 中是如何工作的,并且我已经实现了我的应用将接收或发送的多个操作。

但是,每当我的一个应用程序收到广播时,我想知道是哪个应用程序发送了该广播。

示例(我有三个应用程序):
应用程序 A应用程序 B 被允许向 应用程序 C 发送广播。

Application C 收到广播时,我想知道是哪个应用程序发送了这个广播,是 Application A 还是 Application B

注意:我知道我可以在 Intent 中添加一个 extra 并发送包名称,但是我正在寻找一个“自动生成”的字段.我不想每次都执行以下操作:

intent.putExtra("package_name", getPackageName());

原因,你问?以上只是一个例子。可能有两个以上的应用程序发送广播,我不希望它们每次都在 Intent 中发送包名。

我还注意到 Intent 有一个 getPackage() 方法,但是它总是返回 null

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    switch (action) {
        case MY_GLOBAL_ACTION:
            // this is where I want the package name of the application that sent the broadcast
            intent.getPackage(); // this is always null
            break;
        default:
            break;
    }
}

最佳答案

I want to know which application sent this broadcast, either Application A or Application B?

将其添加为额外内容。

I am looking for a field that is "auto-generated".

没有。默认情况下,Intent 不包含有关创建 Intent 的应用程序的信息,而 HashMap 包含的信息更多。

I also noticed there is getPackage() method for Intent, however that always returns null.

大概是因为您没有调用 setPackage()。而且,由于该包裹无法识别发件人,因此对您没有帮助。

关于Android广播发送应用的包名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40639007/

相关文章:

java - 如何让用户选择Android应用程序的安装位置(SD卡或内部存储)

android - 我如何在 jdk.7.o 中获取 MD5 哈希值?

android - 您是否错过了对 unregisterReceiver() 的调用?在安卓中

android - Android手机上的音频分析

android - IOS Cordova 锁定启动画面方向

android - Android 8 上不显示通知

android - 是否有音量变化的广播 Action ?

android - 启动新 Activity 并清除除家庭 Activity 以外的先前 Activity

android - 在每天的特定时间设置开机时间警报

android - BOOT_COMPLETED Intent 操作的广播无法正常工作