2012-08-09 50 views

回答

1

谢谢,但不是我的本意。我想获得知道,如果一个特定的接收器在运行的应用程序中声明运行时,取得这样说:

private <Receiver extends CyborgReceiver<?>> boolean checkIfBroadcastReceiverIsRegisteredInManifest(Class<Receiver> receiverType) { 
    PackageManager pm = application.getPackageManager(); 
    try { 
     ActivityInfo info = pm.getReceiverInfo(new ComponentName(application, receiverType), PackageManager.GET_RECEIVERS); 
     return info.enabled; 
    } catch (NameNotFoundException e) { 
     return false; 
    } 
} 
+0

CyborgReceiver延伸广播接收器,以及关于过滤器,我真的不记得的情况。 – TacB0sS 2013-02-10 00:51:53

+0

我认为这与监视应用程序中的通话事件有关。 – TacB0sS 2013-02-10 00:53:01

3

使用PackageManager,你可以queryBroadcastReceivers()找到谁将回应一个特定的IntentgetInstalledPackages(),你可以找到每个包安装的接收器。

+0

你打我吧...:d – t0mm13b 2012-08-10 00:36:25

3

的代码会是这样的相似,从活动中:

// Query all packages that have the BroadcastReceivers... 
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
PackageManager pm = getPackageManager(); 
final List<ResolveInfo> listPkgs = pm.queryBroadcast(mainIntent, 0); 
if (listPkgs != null && listPkgs.size() > 0){ 
    for(ResolveInfo resInfo : listPkgs){ 
     // Now resInfo will contain the list of packages that has receivers... 
    } 
} 
0

传入应用程序对象作为第一个参数,你可以做到这一点与(Application)context.GetApplicationContext()如果你有,那么你的类,它实现了广播接收器类作为第二通论点例如broadcastReceiver.class

public static boolean validateReceiverInManifest(Application application, Class receiverClass) throws PackageManager.NameNotFoundException { 
    PackageManager pm = application.getPackageManager(); 
    String packageName = application.getPackageName(); 

    PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_RECEIVERS); 
    ActivityInfo[] receivers = packageInfo.receivers; 
    String receiverClassName = receiverClass.getName(); 
    for (ActivityInfo activityInfo : receivers) { 
     if (activityInfo.name.equals(receiverClassName)) { 
      return true; 
     } 
    } 
    return false; 
}