/**
   * 获取目标类型,activity or service or broadcast
   *
   * @param intent
   * @return
   */
  public static int getTargetType(Intent intent) {

    Iterator<PluginDescriptor> itr = getPlugins().iterator();

    while (itr.hasNext()) {
      PluginDescriptor plugin = itr.next();
      // 如果是通过组件进行匹配的
      if (intent.getComponent() != null) {
        if (plugin.containsName(intent.getComponent().getClassName())) {
          return plugin.getType(intent.getComponent().getClassName());
        }
      } else {
        String clazzName = findClassNameByIntent(intent, plugin.getActivitys());

        if (clazzName == null) {
          clazzName = findClassNameByIntent(intent, plugin.getServices());
        }

        if (clazzName == null) {
          clazzName = findClassNameByIntent(intent, plugin.getReceivers());
        }

        if (clazzName != null) {
          return plugin.getType(clazzName);
        }
      }
    }
    return PluginDescriptor.UNKOWN;
  }
  /**
   * //If getComponent returns an explicit class, that is returned without any further
   * consideration. //If getAction is non-NULL, the activity must handle this action. //If
   * resolveType returns non-NULL, the activity must handle this type. //If addCategory has added
   * any categories, the activity must handle ALL of the categories specified. //If getPackage is
   * non-NULL, only activity components in that application package will be considered.
   *
   * @param intent
   * @return
   */
  public static String matchPlugin(Intent intent) {

    Iterator<PluginDescriptor> itr = getPlugins().iterator();

    while (itr.hasNext()) {
      PluginDescriptor plugin = itr.next();
      // 如果是通过组件进行匹配的
      if (intent.getComponent() != null) {
        if (plugin.containsName(intent.getComponent().getClassName())) {
          return intent.getComponent().getClassName();
        }
      } else {
        // 如果是通过IntentFilter进行匹配的
        String clazzName = findClassNameByIntent(intent, plugin.getActivitys());

        if (clazzName == null) {
          clazzName = findClassNameByIntent(intent, plugin.getServices());
        }

        if (clazzName == null) {
          clazzName = findClassNameByIntent(intent, plugin.getReceivers());
        }

        if (clazzName != null) {
          return clazzName;
        }
      }
    }
    return null;
  }