检查广播接收器是否已注册?

12

有没有办法检查广播接收器是否正常工作?

我已经按照以下方式实现,注册了广播接收器,但它并没有找到这个已注册的接收器。

PackageManager pm = getApplicationContext().getPackageManager();
final List<PackageInfo> packs = pm.getInstalledPackages(PackageManager.GET_RECEIVERS);
    for (final PackageInfo p : packs) {
        ActivityInfo[] receivers = p.receivers;
        if (receivers != null) {
            for (ActivityInfo ai : receivers) {
                if(AppDetectionService.class.getName().equals(ai.name)){
                    onOff[2] = true;
                }
            }
        }                   
    }

你为什么需要那个? - Aman Gautam
我有一个主开关。假设接收者已注册。当我再次启动程序时,我会检查接收者是否注册。如果接收者已注册,开关将打开。 - aysbtl_
2个回答

11

目前唯一的方法是调用 unregisterReceiver(receiver) 并捕获 IllegalArgumentException 异常,如果未注册则会抛出异常。当你收到这个异常时,请忽略它,你不需要对它做任何处理。

我已向 Google 提出了一个功能请求,以添加此 API。请在此处支持它: https://code.google.com/p/android/issues/detail?id=73718


9

你可能希望使用queryBroadcastReceivers来查看是否有接收器可以接收你的意图。如果你遇到了多个接收器注册的问题,你可能需要查看this


1
你知道如何使用queryBroadcstReceiver(intent,flag)吗?实际上我不太明白intent和flag是什么。我只想获取所有已注册的接收器,并检查特定的接收器是否已注册。 - aysbtl_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接