类android.content.res.XmlResourceParser源码实例Demo

下面列出了怎么用android.content.res.XmlResourceParser的API类实例代码及写法,或者点击链接到github查看源代码。

@NonNull
private WearPreferenceScreen parseScreen(@NonNull final Context context, @NonNull final XmlResourceParser parser)
        throws XmlPullParserException, IOException {

    while(parser.getName() == null) {
        parser.next();
    }

    if("PreferenceScreen".equals(parser.getName())) {
        final WearPreferenceScreen screen = new WearPreferenceScreen(context, parser);
        parsePreferences(context, parser, screen);
        return screen;
    } else {
        throw new IllegalArgumentException("Preferences file must start with a PreferenceScreen element");
    }
}
 
源代码2 项目: LaunchEnr   文件: DefaultLayoutParser.java
@Override
public long parseAndAdd(XmlResourceParser parser) throws XmlPullParserException,
        IOException {
    // Folder contents come from an external XML resource
    final Partner partner = Partner.get(mPackageManager);
    if (partner != null) {
        final Resources partnerRes = partner.getResources();
        final int resId = partnerRes.getIdentifier(Partner.RES_FOLDER,
                "xml", partner.getPackageName());
        if (resId != 0) {
            final XmlResourceParser partnerParser = partnerRes.getXml(resId);
            beginDocument(partnerParser, TAG_FOLDER);

            FolderParser folderParser = new FolderParser(getFolderElementsMap(partnerRes));
            return folderParser.parseAndAdd(partnerParser);
        }
    }
    return -1;
}
 
源代码3 项目: simple-keyboard   文件: KeyboardLayoutSet.java
private void parseKeyboardLayoutSet(final Resources res, final int resId)
        throws XmlPullParserException, IOException {
    final XmlResourceParser parser = res.getXml(resId);
    try {
        while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
            final int event = parser.next();
            if (event == XmlPullParser.START_TAG) {
                final String tag = parser.getName();
                if (TAG_KEYBOARD_SET.equals(tag)) {
                    parseKeyboardLayoutSetContent(parser);
                } else {
                    throw new XmlParseUtils.IllegalStartTag(parser, tag, TAG_KEYBOARD_SET);
                }
            }
        }
    } finally {
        parser.close();
    }
}
 
源代码4 项目: AppTroy   文件: ResourceDump.java
private void getAttributes(StringBuilder sb, XmlResourceParser parser) throws XmlPullParserException {
    int count = parser.getAttributeCount();
    for (int i = 0; i < count; i++) {
        sb.append(" ");
        String namespace = parser.getAttributeNamespace(i);
        if (namespace != null) {
            int index = namespace.lastIndexOf("/");
            if (index > 0) {
                namespace = namespace.substring(index + 1);
            }
            sb.append(namespace);
            sb.append(":");
        }
        sb.append(parser.getAttributeName(i));
        sb.append("=");
        sb.append(parser.getAttributeValue(i));
    }
}
 
源代码5 项目: LB-Launcher   文件: DefaultLayoutParser.java
@Override
public long parseAndAdd(XmlResourceParser parser) throws XmlPullParserException,
        IOException {
    // Folder contents come from an external XML resource
    final Partner partner = Partner.get(mPackageManager);
    if (partner != null) {
        final Resources partnerRes = partner.getResources();
        final int resId = partnerRes.getIdentifier(Partner.RES_FOLDER,
                "xml", partner.getPackageName());
        if (resId != 0) {
            final XmlResourceParser partnerParser = partnerRes.getXml(resId);
            beginDocument(partnerParser, TAG_FOLDER);

            FolderParser folderParser = new FolderParser(getFolderElementsMap(partnerRes));
            return folderParser.parseAndAdd(partnerParser);
        }
    }
    return -1;
}
 
源代码6 项目: libcommon   文件: Keyboard.java
public Row(Resources res, @NonNull final  Keyboard parent, XmlResourceParser parser) {
	if (DEBUG) Log.v(TAG, "コンストラクタ:");
	this.parent = parent;
	TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
		R.styleable.Keyboard);
	defaultWidth = getDimensionOrFraction(a,
		R.styleable.Keyboard_keyWidth,
		parent.mDisplayWidth, parent.mDefaultWidth);
	defaultHeight = getDimensionOrFraction(a,
		R.styleable.Keyboard_keyHeight,
		parent.mDisplayHeight, parent.mDefaultHeight);
	defaultHorizontalGap = getDimensionOrFraction(a,
		R.styleable.Keyboard_horizontalGap,
		parent.mDisplayWidth, parent.mDefaultHorizontalGap);
	verticalGap = getDimensionOrFraction(a,
		R.styleable.Keyboard_verticalGap,
		parent.mDisplayHeight, parent.mDefaultVerticalGap);
	a.recycle();
	a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Row);
	rowEdgeFlags = a.getInt(R.styleable.Keyboard_Row_rowEdgeFlags, 0);
	mode = a.getResourceId(R.styleable.Keyboard_Row_keyboardMode, 0);
	a.recycle();
}
 
源代码7 项目: hackerskeyboard   文件: LatinKeyboard.java
@Override
protected Key createKeyFromXml(Resources res, Row parent, int x, int y,
        XmlResourceParser parser) {
    Key key = new LatinKey(res, parent, x, y, parser);
    if (key.codes == null) return key;
    switch (key.codes[0]) {
    case LatinIME.ASCII_ENTER:
        mEnterKey = key;
        break;
    case LatinKeyboardView.KEYCODE_F1:
        mF1Key = key;
        break;
    case LatinIME.ASCII_SPACE:
        mSpaceKey = key;
        break;
    case KEYCODE_MODE_CHANGE:
        m123Key = key;
        m123Label = key.label;
        break;
    }

    return key;
}
 
源代码8 项目: cwac-netsecurity   文件: XmlConfigSource.java
private CertificatesEntryRef parseCertificatesEntry(XmlResourceParser parser,
            boolean defaultOverridePins)
            throws IOException, XmlPullParserException, ParserException {
        boolean overridePins =
                parser.getAttributeBooleanValue(null, "overridePins", defaultOverridePins);
        int sourceId = parser.getAttributeResourceValue(null, "src", -1);
        String sourceString = parser.getAttributeValue(null, "src");
        CertificateSource source = null;
        if (sourceString == null) {
            throw new ParserException(parser, "certificates element missing src attribute");
        }
        if (sourceId != -1) {
            // TODO: Cache ResourceCertificateSources by sourceId
            source = new ResourceCertificateSource(sourceId, mContext);
        } else if ("system".equals(sourceString) || "user".equals(sourceString)) {
            // MLM treat user as system
            source = SystemCertificateSource.getInstance();
//        } else if ("user".equals(sourceString)) {
//            source = UserCertificateSource.getInstance();
        } else {
            throw new ParserException(parser, "Unknown certificates src. "
                    + "Should be one of system|user|@resourceVal");
        }
        XmlUtils.skipCurrentTag(parser);
        return new CertificatesEntryRef(source, overridePins);
    }
 
源代码9 项目: aptoide-client-v8   文件: PreferencesXmlParser.java
public List<String[]> parse(XmlResourceParser parser) throws IOException, XmlPullParserException {
  ArrayList<String[]> data = new ArrayList<>();
  while (eventType != XmlResourceParser.END_DOCUMENT) {
    if (eventType == XmlResourceParser.START_TAG) {
      String defaultValue = parser.getAttributeValue(NAMESPACE, DEFAULT_VALUE);
      String key = parser.getAttributeValue(NAMESPACE, KEY);
      if (defaultValue != null) {
        String[] keyValue = new String[2];
        keyValue[0] = key;
        keyValue[1] = defaultValue;
        data.add(keyValue);
      }
    }
    eventType = parser.next();
  }
  return data;
}
 
源代码10 项目: FloatingSearchView   文件: FloatingSearchView.java
public void inflateMenu(@MenuRes int menuRes) {
    if(menuRes == 0) return;
    if (isInEditMode()) return;
    getActivity().getMenuInflater().inflate(menuRes, mActionMenu.getMenu());

    XmlResourceParser parser = null;
    try {
        //noinspection ResourceType
        parser = getResources().getLayout(menuRes);
        AttributeSet attrs = Xml.asAttributeSet(parser);
        parseMenu(parser, attrs);
    } catch (XmlPullParserException | IOException e) {
        // should not happens
        throw new InflateException("Error parsing menu XML", e);
    } finally {
        if (parser != null) parser.close();
    }
}
 
源代码11 项目: LB-Launcher   文件: AutoInstallsLayout.java
@Override
public long parseAndAdd(XmlResourceParser parser) {
    final String packageName = getAttributeValue(parser, ATTR_PACKAGE_NAME);
    final String className = getAttributeValue(parser, ATTR_CLASS_NAME);
    if (TextUtils.isEmpty(packageName) || TextUtils.isEmpty(className)) {
        if (LOGD) Log.d(TAG, "Skipping invalid <favorite> with no component");
        return -1;
    }

    mValues.put(Favorites.RESTORED, ShortcutInfo.FLAG_AUTOINTALL_ICON);
    final Intent intent = new Intent(Intent.ACTION_MAIN, null)
        .addCategory(Intent.CATEGORY_LAUNCHER)
        .setComponent(new ComponentName(packageName, className))
        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    return addShortcut(mContext.getString(R.string.package_state_unknown), intent,
            Favorites.ITEM_TYPE_APPLICATION);
}
 
源代码12 项目: java-n-IDE-for-Android   文件: LatinKeyboard.java
@Override
protected Key createKeyFromXml(Resources res, Row parent, int x, int y, XmlResourceParser parser) {
    Key key = new LatinKey(res, parent, x, y, parser);

    if (key.codes[0] == 13) {
        mEnterKey = key;
    } else if (key.codes[0] == TerminalKeyboard.CTRL_KEY) {
        mCtrlKey = key;
    } else if (key.codes[0] == TerminalKeyboard.ALT_KEY) {
        mALTKey = key;
    } else if (key.codes[0] == -1) {
        mShiftKeyLeft = key;
    } else if (key.codes[0] == -999) {
        mShiftKeyRight = key;
    } else if (key.codes[0] == -2) {
        mFNKey = key;
    }

    return key;
}
 
源代码13 项目: AOSP-Kayboard-7.1.2   文件: KeyboardLayoutSet.java
static int readScriptId(final Resources resources, final InputMethodSubtype subtype) {
    final String layoutSetName = KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX
            + SubtypeLocaleUtils.getKeyboardLayoutSetName(subtype);
    final int xmlId = getXmlId(resources, layoutSetName);
    final XmlResourceParser parser = resources.getXml(xmlId);
    try {
        while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
            // Bovinate through the XML stupidly searching for TAG_FEATURE, and read
            // the script Id from it.
            parser.next();
            final String tag = parser.getName();
            if (TAG_FEATURE.equals(tag)) {
                return readScriptIdFromTagFeature(resources, parser);
            }
        }
    } catch (final IOException | XmlPullParserException e) {
        throw new RuntimeException(e.getMessage() + " in " + layoutSetName, e);
    } finally {
        parser.close();
    }
    // If the tag is not found, then the default script is Latin.
    return ScriptUtils.SCRIPT_LATIN;
}
 
@NonNull
private WearPreference parsePreferenceInternal(@NonNull final Context context, @NonNull final String name, @NonNull final XmlResourceParser parser) {
    switch(parser.getName()) {
        case "ListPreference":
            return new WearListPreference(context, parser);
        case "SwitchPreference":
        case "CheckBoxPreference":
            return new WearTwoStatePreference(context, parser);
        default:
            return parsePreferenceUsingReflection(context, name, parser);
    }
}
 
源代码15 项目: Auie   文件: UENavigationFragmentActivity.java
/**
 * 读取XML配置文件
 * @param id 配置文件索引
 */
private void readXML(int id){
	String name;
	String className = getClass().getSimpleName();
	XmlResourceParser xrp = getResources().getXml(id);
	try {
		while(xrp.getEventType() != XmlResourceParser.END_DOCUMENT){
			if (xrp.getEventType() == XmlResourceParser.START_TAG) {
				name = xrp.getName();
				if (name.equals("BackgroundColor")) {
					mNavigationView.setBackgroundColor(xrp.getAttributeIntValue(0, mNavigationView.getBackgroundColor()));
				}
				if (name.equals("StatusType")) {
					mNavigationView.setStatusType(xrp.getAttributeIntValue(0, mNavigationView.getStatusType()));
				}
				if (name.equals("TitleColor")) {
					mNavigationView.setTitleColor(xrp.getAttributeIntValue(0, mNavigationView.getTitleColor()));
				}
				if (name.equals("LineBackgroundColor")) {
					mNavigationView.setLineBackgroundColor(xrp.getAttributeIntValue(0, mNavigationView.getTitleColor()));
				}
				if (name.equals("NavigationTextColor")) {
					mNavigationView.setNavigationTextColor(xrp.getAttributeIntValue(0, mNavigationView.getNavigationTextColor()));
				}
				if (name.equals("Title") && xrp.getAttributeValue(0).equals(className)) {
					mNavigationView.setTitle(xrp.getAttributeValue(1));
				}
			}
			xrp.next();
		}
	} catch (Exception e) {
		Log.d(UE.TAG, "UEConfig配置出错"+e.toString());
	}
}
 
源代码16 项目: Small   文件: BundleParser.java
private static void skipCurrentTag(XmlResourceParser parser)
        throws XmlPullParserException, IOException {
    int outerDepth = parser.getDepth();
    int type;
    while ((type=parser.next()) != XmlResourceParser.END_DOCUMENT
            && (type != XmlResourceParser.END_TAG
            || parser.getDepth() > outerDepth)) {
    }
}
 
源代码17 项目: WirelessHid   文件: Keyboard.java
private String getStringAttributeValue(XmlResourceParser xmlParser, String attributeName,
        String defaultValue) {
    String value = xmlParser.getAttributeValue(null, attributeName);
    if (value != null)
        return value;
    return defaultValue;
}
 
源代码18 项目: libcommon   文件: Keyboard.java
protected Key createKeyFromXml(@NonNull final Resources res,
	@NonNull final Row parent,
	final int x, final int y,
	@NonNull final XmlResourceParser parser) {

	if (DEBUG) Log.v(TAG, "createKeyFromXml:");
	return new Key(res, parent, x, y, parser);
}
 
源代码19 项目: letv   文件: FileProvider.java
private static PathStrategy parsePathStrategy(Context context, String authority) throws IOException, XmlPullParserException {
    SimplePathStrategy strat = new SimplePathStrategy(authority);
    XmlResourceParser in = context.getPackageManager().resolveContentProvider(authority, 128).loadXmlMetaData(context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);
    if (in == null) {
        throw new IllegalArgumentException("Missing android.support.FILE_PROVIDER_PATHS meta-data");
    }
    while (true) {
        int type = in.next();
        if (type == 1) {
            return strat;
        }
        if (type == 2) {
            String tag = in.getName();
            String name = in.getAttributeValue(null, "name");
            String path = in.getAttributeValue(null, ATTR_PATH);
            File target = null;
            if (TAG_ROOT_PATH.equals(tag)) {
                target = buildPath(DEVICE_ROOT, path);
            } else if (TAG_FILES_PATH.equals(tag)) {
                target = buildPath(context.getFilesDir(), path);
            } else if (TAG_CACHE_PATH.equals(tag)) {
                target = buildPath(context.getCacheDir(), path);
            } else if (TAG_EXTERNAL.equals(tag)) {
                target = buildPath(Environment.getExternalStorageDirectory(), path);
            }
            if (target != null) {
                strat.addRoot(name, target);
            }
        }
    }
}
 
源代码20 项目: Trebuchet   文件: AutoInstallsLayout.java
/**
 * Return attribute resource value, attempting launcher-specific namespace
 * first before falling back to anonymous attribute.
 */
protected static int getAttributeResourceValue(XmlResourceParser parser, String attribute,
        int defaultValue) {
    int value = parser.getAttributeResourceValue(
            "http://schemas.android.com/apk/res-auto/com.android.launcher3", attribute,
            defaultValue);
    if (value == defaultValue) {
        value = parser.getAttributeResourceValue(null, attribute, defaultValue);
    }
    return value;
}
 
源代码21 项目: Trebuchet   文件: AutoInstallsLayout.java
/**
 * Return attribute value, attempting launcher-specific namespace first
 * before falling back to anonymous attribute.
 */
protected static String getAttributeValue(XmlResourceParser parser, String attribute) {
    String value = parser.getAttributeValue(
            "http://schemas.android.com/apk/res-auto/com.android.launcher3", attribute);
    if (value == null) {
        value = parser.getAttributeValue(null, attribute);
    }
    return value;
}
 
源代码22 项目: BottomBar   文件: TabParser.java
@ColorInt
private int getColorValue(@NonNull XmlResourceParser parser, @IntRange(from = 0) int attrIndex) {
    int colorResource = parser.getAttributeResourceValue(attrIndex, 0);

    if (colorResource == RESOURCE_NOT_FOUND) {
        try {
            String colorValue = parser.getAttributeValue(attrIndex);
            return Color.parseColor(colorValue);
        } catch (Exception ignored) {
            return COLOR_NOT_SET;
        }
    }

    return ContextCompat.getColor(context, colorResource);
}
 
源代码23 项目: iBeebo   文件: ChangeLogDialog.java
private String ParseReleaseTag(XmlResourceParser aXml) throws XmlPullParserException, IOException {
    String _Result = "<h1>版本: " + aXml.getAttributeValue(null, "version") + "</h1><ul>";
    int eventType = aXml.getEventType();
    while ((eventType != XmlPullParser.END_TAG) || (aXml.getName().equals("change"))) {
        if ((eventType == XmlPullParser.START_TAG) && (aXml.getName().equals("change"))) {
            eventType = aXml.next();
            _Result = _Result + "<li>" + aXml.getText() + "</li>";
        }
        eventType = aXml.next();
    }
    _Result = _Result + "</ul>";
    return _Result;
}
 
源代码24 项目: xdroid   文件: AbstractInflater.java
public T inflate(Context context, int xmlId) {
    XmlResourceParser parser = context.getResources().getXml(xmlId);
    if (parser == null) {
        throw new InflateException(String.valueOf(xmlId));
    }

    try {
        int type;
        do {
            type = parser.next();
        } while (type != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT);

        if (type != XmlPullParser.START_TAG) {
            throw new InflateException(parser.getPositionDescription());
        }

        T result = notNull(createFromTag(context, parser, null, parser));

        if (mCompositeClazz.isInstance(result)) {
            inflateRec(context, parser, mCompositeClazz.cast(result), parser);
        }

        return result;
    } catch (XmlPullParserException | IOException ex) {
        throw new InflateException(parser.getPositionDescription(), ex);
    }
}
 
源代码25 项目: Android-skin-support   文件: SkinCompatResources.java
private XmlResourceParser getSkinXml(Context context, int resId) {
    if (!isDefaultSkin) {
        int targetResId = getTargetResId(context, resId);
        if (targetResId != 0) {
            return mResources.getXml(targetResId);
        }
    }
    return context.getResources().getXml(resId);
}
 
源代码26 项目: Trebuchet   文件: DefaultLayoutParser.java
@Override
protected void parseContainerAndScreen(XmlResourceParser parser, long[] out) {
    out[0] = LauncherSettings.Favorites.CONTAINER_DESKTOP;
    String strContainer = getAttributeValue(parser, ATTR_CONTAINER);
    if (strContainer != null) {
        out[0] = Long.valueOf(strContainer);
    }
    out[1] = Long.parseLong(getAttributeValue(parser, ATTR_SCREEN));
}
 
源代码27 项目: android_9.0.0_r45   文件: SearchableInfo.java
/**
 * Gets search information for the given activity.
 *
 * @param context Context to use for reading activity resources.
 * @param activityInfo Activity to get search information from.
 * @return Search information about the given activity, or {@code null} if
 *         the activity has no or invalid searchability meta-data.
 *
 * @hide For use by SearchManagerService.
 */
public static SearchableInfo getActivityMetaData(Context context, ActivityInfo activityInfo,
        int userId) {
    Context userContext = null;
    try {
        userContext = context.createPackageContextAsUser("system", 0,
            new UserHandle(userId));
    } catch (NameNotFoundException nnfe) {
        Log.e(LOG_TAG, "Couldn't create package context for user " + userId);
        return null;
    }
    // for each component, try to find metadata
    XmlResourceParser xml = 
            activityInfo.loadXmlMetaData(userContext.getPackageManager(), MD_LABEL_SEARCHABLE);
    if (xml == null) {
        return null;
    }
    ComponentName cName = new ComponentName(activityInfo.packageName, activityInfo.name);
    
    SearchableInfo searchable = getActivityMetaData(userContext, xml, cName);
    xml.close();
    
    if (DBG) {
        if (searchable != null) {
            Log.d(LOG_TAG, "Checked " + activityInfo.name
                    + ",label=" + searchable.getLabelId()
                    + ",icon=" + searchable.getIconId()
                    + ",suggestAuthority=" + searchable.getSuggestAuthority()
                    + ",target=" + searchable.getSearchActivity().getClassName()
                    + ",global=" + searchable.shouldIncludeInGlobalSearch()
                    + ",settingsDescription=" + searchable.getSettingsDescriptionId()
                    + ",threshold=" + searchable.getSuggestThreshold());
        } else {
            Log.d(LOG_TAG, "Checked " + activityInfo.name + ", no searchable meta-data");
        }
    }
    return searchable;
}
 
源代码28 项目: Jockey   文件: BrowserServicePackageValidator.java
private Map<String, ArrayList<CallerInfo>> readValidCertificates(XmlResourceParser parser) {
    HashMap<String, ArrayList<CallerInfo>> validCertificates = new HashMap<>();
    try {
        int eventType = parser.next();
        while (eventType != XmlResourceParser.END_DOCUMENT) {
            if (eventType == XmlResourceParser.START_TAG
                    && parser.getName().equals("signing_certificate")) {

                String name = parser.getAttributeValue(null, "name");
                String packageName = parser.getAttributeValue(null, "package");
                boolean isRelease = parser.getAttributeBooleanValue(null, "release", false);
                String certificate = parser.nextText().replaceAll("\\s|\\n", "");

                CallerInfo info = new CallerInfo(name, packageName, isRelease);

                ArrayList<CallerInfo> infos = validCertificates.get(certificate);
                if (infos == null) {
                    infos = new ArrayList<>();
                    validCertificates.put(certificate, infos);
                }
                Timber.v("Adding allowed caller: %s package=%s release=%b certificate=%s",
                        info.name, info.packageName, info.release, certificate);
                infos.add(info);
            }
            eventType = parser.next();
        }
    } catch (XmlPullParserException | IOException e) {
        Timber.e(e, "Could not read allowed callers from XML.");
    }

    return validCertificates;
}
 
源代码29 项目: LaunchEnr   文件: AutoInstallsLayout.java
@Override
public long parseAndAdd(XmlResourceParser parser)
        throws XmlPullParserException, IOException {
    final String packageName = getAttributeValue(parser, ATTR_PACKAGE_NAME);
    final String className = getAttributeValue(parser, ATTR_CLASS_NAME);
    if (TextUtils.isEmpty(packageName) || TextUtils.isEmpty(className)) {
        return -1;
    }

    mValues.put(Favorites.SPANX, getAttributeValue(parser, ATTR_SPAN_X));
    mValues.put(Favorites.SPANY, getAttributeValue(parser, ATTR_SPAN_Y));
    mValues.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_APPWIDGET);

    // Read the extras
    Bundle extras = new Bundle();
    int widgetDepth = parser.getDepth();
    int type;
    while ((type = parser.next()) != XmlPullParser.END_TAG ||
            parser.getDepth() > widgetDepth) {
        if (type != XmlPullParser.START_TAG) {
            continue;
        }

        if (TAG_EXTRA.equals(parser.getName())) {
            String key = getAttributeValue(parser, ATTR_KEY);
            String value = getAttributeValue(parser, ATTR_VALUE);
            if (key != null && value != null) {
                extras.putString(key, value);
            } else {
                throw new RuntimeException("Widget extras must have a key and value");
            }
        } else {
            throw new RuntimeException("Widgets can contain only extras");
        }
    }

    return verifyAndInsert(new ComponentName(packageName, className), extras);
}
 
/**
 * 指定されたパッケージ名からサービスのコンポーネント情報を取得します.
 *
 * @param context コンテキスト
 * @param packageName パッケージ名
 * @return コンポーネント情報
 */
private static ServiceInfo getServiceInfo(final Context context, final String packageName) {
    try {
        PackageManager pkgMgr = context.getPackageManager();
        PackageInfo pkg = pkgMgr.getPackageInfo(packageName, PackageManager.GET_SERVICES);
        if (pkg != null) {
            ServiceInfo[] services = pkg.services;
            if (services != null) {
                for (int i = 0; i < services.length; i++) {
                    String pkgName = services[i].packageName;
                    String className = services[i].name;
                    ComponentName component = new ComponentName(pkgName, className);
                    ServiceInfo serviceInfo = pkgMgr.getServiceInfo(component, PackageManager.GET_META_DATA);
                    if (serviceInfo.metaData != null) {
                        Object xmlData = serviceInfo.metaData.get(PLUGIN_META_DATA);
                        if (xmlData instanceof Integer) {
                            XmlResourceParser xrp = serviceInfo.loadXmlMetaData(pkgMgr, PLUGIN_META_DATA);
                            if (xrp != null) {
                                return serviceInfo;
                            }
                        }
                    }
                }
            }
        }
        return null;
    } catch (NameNotFoundException e) {
        return null;
    }
}