android.content.res.XmlResourceParser#getAttributeValue()源码实例Demo

下面列出了android.content.res.XmlResourceParser#getAttributeValue() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: android_9.0.0_r45   文件: 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)) {
        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);
}
 
源代码2 项目: iBeebo   文件: SettingChangeLogDialog.java
private String ParseReleaseTag(XmlResourceParser aXml) throws XmlPullParserException, IOException {
    String _Result = "<h1>Release: " + 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;
}
 
源代码3 项目: AndroidTVWidget   文件: XmlKeyboardLoader.java
private boolean getBoolean(XmlResourceParser xrp, String name, boolean defValue) {
	String s = xrp.getAttributeValue(null, name);
	if (null == s)
		return defValue;
	try {
		boolean ret = Boolean.parseBoolean(s);
		return ret;
	} catch (NumberFormatException e) {
		return defValue;
	}
}
 
源代码4 项目: Neptune   文件: ManifestParser.java
/**
 * 解析Activity、Service、Recevier等组件节点
 */
private ComponentBean parseComponent(XmlResourceParser parser) throws IOException, XmlPullParserException {
    ComponentBean bean = new ComponentBean();

    String name = parser.getAttributeValue(ANDROID_RESOURCES, "name");
    bean.className = buildClassName(pkg, name);

    int outerDepth = parser.getDepth();
    int type;
    while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
            && (type != XmlPullParser.END_TAG
            || parser.getDepth() > outerDepth)) {
        if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
            continue;
        }

        String tagName = parser.getName();
        if (tagName.equals("intent-filter")) {
            IntentFilter intentFilter = parseIntent(parser);
            if (intentFilter != null) {
                bean.intentFilters.add(intentFilter);
            }
        }
    }

    return bean;
}
 
源代码5 项目: 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;
}
 
源代码6 项目: NanoIconPackLite   文件: LiteIconActivityV2.java
private List<Cate> getIcons() {
    List<Cate> dataList = new ArrayList<>();
    Cate defCate = new Cate(null);
    XmlResourceParser parser = getResources().getXml(R.xml.drawable);
    try {
        int event = parser.getEventType();
        while (event != XmlPullParser.END_DOCUMENT) {
            if (event == XmlPullParser.START_TAG) {
                switch (parser.getName()) {
                    case "category":
                        dataList.add(new Cate(parser.getAttributeValue(null, "title")));
                        break;
                    case "item":
                        String iconName = parser.getAttributeValue(null, "drawable");
                        if (dataList.isEmpty()) {
                            defCate.pushIcon(iconName);
                        } else {
                            dataList.get(dataList.size() - 1).pushIcon(iconName);
                        }
                        break;
                }
            }
            event = parser.next();
        }
        if (!defCate.isEmpty()) {
            dataList.add(defCate);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return dataList;
}
 
private static String addIntentFilter(HashMap<String, ArrayList<PluginIntentFilter>> map, String packageName, String namespace,
                                         XmlResourceParser parser, String endTagName) throws XmlPullParserException, IOException {
	int eventType = parser.getEventType();
	String activityName = parser.getAttributeValue(namespace, "name");
	activityName = getName(activityName, packageName);

	ArrayList<PluginIntentFilter> filters = map.get(activityName);
	if (filters == null) {
		filters = new ArrayList<PluginIntentFilter>();
           map.put(activityName, filters);
	}
	
	PluginIntentFilter intentFilter = new PluginIntentFilter();
	do {
		switch (eventType) {
			case XmlPullParser.START_TAG: {
				String tag = parser.getName();
				if ("intent-filter".equals(tag)) {
					intentFilter = new PluginIntentFilter();
					filters.add(intentFilter);
				} else {
					intentFilter.readFromXml(tag, namespace, parser);
				}
			}
		}
		eventType = parser.next();
	} while (!endTagName.equals(parser.getName()));//再次到达,表示一个标签结束了

       return activityName;
}
 
源代码8 项目: 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;
}
 
源代码9 项目: cwac-netsecurity   文件: XmlConfigSource.java
private PinSet parsePinSet(XmlResourceParser parser)
        throws IOException, XmlPullParserException, ParserException {
    String expirationDate = parser.getAttributeValue(null, "expiration");
    long expirationTimestampMilis = Long.MAX_VALUE;
    if (expirationDate != null) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            sdf.setLenient(false);
            Date date = sdf.parse(expirationDate);
            if (date == null) {
                throw new ParserException(parser, "Invalid expiration date in pin-set");
            }
            expirationTimestampMilis = date.getTime();
        } catch (ParseException e) {
            throw new ParserException(parser, "Invalid expiration date in pin-set", e);
        }
    }

    int outerDepth = parser.getDepth();
    Set<Pin> pins = new HashSet<>();
    while (XmlUtils.nextElementWithin(parser, outerDepth)) {
        String tagName = parser.getName();
        if (tagName.equals("pin")) {
            pins.add(parsePin(parser));
        } else {
            XmlUtils.skipCurrentTag(parser);
        }
    }
    return new PinSet(pins, expirationTimestampMilis);
}
 
源代码10 项目: LecteurOPUS   文件: Contract.java
public void setLogoFromXml(Context ctx){
    String node = "";
    String logo = "";
    m_operatorName = "";
    XmlResourceParser operatorXml = ctx.getResources().getXml(R.xml.operators);
    try {
        int event = operatorXml.getEventType();
        outerloop:
        while (event != XmlPullParser.END_DOCUMENT){
            switch (event) {
                case XmlPullParser.START_TAG:
                    node = operatorXml.getName();
                    if(node.equals("operator")) {
                        if (operatorXml.getAttributeValue(null, "id").equals("" + m_operatorId)) {
                            logo = operatorXml.getAttributeValue(null, "logo");
                            m_operatorName = operatorXml.getAttributeValue(null, "name");
                            break outerloop;
                        }
                    }
                    break;
            }
            event = operatorXml.next();
        }
    } catch (Exception e) {
        Log.e("CardActivity", "Error parsing stations XML file: " + e.getMessage());
    }

    m_logoId = 0;
    if (!logo.equals("")){
        m_logoId = ctx.getResources().getIdentifier(logo, "drawable", ctx.getPackageName());
    }
}
 
源代码11 项目: speechutils   文件: RecognitionServiceManager.java
public static String getSettingsActivity(Context context, ServiceInfo si)
        throws XmlPullParserException, IOException {
    PackageManager pm = context.getPackageManager();
    XmlResourceParser parser = null;
    try {
        parser = si.loadXmlMetaData(pm, RecognitionService.SERVICE_META_DATA);
        if (parser == null) {
            throw new XmlPullParserException("No " + RecognitionService.SERVICE_META_DATA + " meta-data");
        }

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

        String nodeName = parser.getName();
        if (!"recognition-service".equals(nodeName)) {
            throw new XmlPullParserException(
                    "Meta-data does not start with recognition-service tag");
        }

        return parser.getAttributeValue("http://schemas.android.com/apk/res/android",
                "settingsActivity");
    } finally {
        if (parser != null) parser.close();
    }
}
 
源代码12 项目: MiBandDecompiled   文件: FileProvider.java
private static d b(Context context, String s)
{
    e e1 = new e(s);
    XmlResourceParser xmlresourceparser = context.getPackageManager().resolveContentProvider(s, 128).loadXmlMetaData(context.getPackageManager(), "android.support.FILE_PROVIDER_PATHS");
    if (xmlresourceparser == null)
    {
        throw new IllegalArgumentException("Missing android.support.FILE_PROVIDER_PATHS meta-data");
    }
    do
    {
        int l = xmlresourceparser.next();
        if (l != 1)
        {
            if (l == 2)
            {
                String s1 = xmlresourceparser.getName();
                String s2 = xmlresourceparser.getAttributeValue(null, "name");
                String s3 = xmlresourceparser.getAttributeValue(null, "path");
                File file;
                if ("root-path".equals(s1))
                {
                    file = a(i, new String[] {
                        s3
                    });
                } else
                if ("files-path".equals(s1))
                {
                    file = a(context.getFilesDir(), new String[] {
                        s3
                    });
                } else
                if ("cache-path".equals(s1))
                {
                    file = a(context.getCacheDir(), new String[] {
                        s3
                    });
                } else
                if ("external-path".equals(s1))
                {
                    file = a(Environment.getExternalStorageDirectory(), new String[] {
                        s3
                    });
                } else
                {
                    file = null;
                }
                if (file != null)
                {
                    e1.a(s2, file);
                }
            }
        } else
        {
            return e1;
        }
    } while (true);
}
 
源代码13 项目: nfcspy   文件: ApduParser.java
@SuppressWarnings("unchecked")
static Apdu7816 readTag(Class<? extends Apdu7816> clazz,
		XmlResourceParser xml) throws Exception {
	if (xml.getEventType() != START_TAG)
		return null;

	final String thisTag = xml.getName();
	final String testTag = (String) clazz.getDeclaredField("TAG").get(null);
	if (!thisTag.equalsIgnoreCase(testTag))
		return null;

	final String apduName = xml.getAttributeValue(null, "name");
	final String apduVal = xml.getAttributeValue(null, "val");
	final ArrayList<Apdu7816> list = new ArrayList<Apdu7816>();

	final Object child = clazz.getDeclaredField("SUB").get(null);
	while (true) {
		int event = xml.next();
		if (event == END_DOCUMENT)
			break;

		if (event == END_TAG && thisTag.equalsIgnoreCase(xml.getName()))
			break;

		if (child != null) {
			Apdu7816 apdu = readTag((Class<? extends Apdu7816>) child, xml);
			if (apdu != null)
				list.add(apdu);
		}
	}

	final Apdu7816[] sub;
	if (list.isEmpty())
		sub = null;
	else
		sub = list.toArray(new Apdu7816[list.size()]);

	final Apdu7816 ret = clazz.newInstance();

	ret.init(parseValue(apduVal), apduName, sub);

	return ret;
}
 
源代码14 项目: mimi-reader   文件: ResourceUtils.java
public static Map<String,String> getHashMapResource(Context c, int hashMapResId) {
    Map<String,String> map = null;
    XmlResourceParser parser = c.getResources().getXml(hashMapResId);

    String key = null, value = null;

    try {
        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_DOCUMENT) {
                Log.d("utils","Start document");
            } else if (eventType == XmlPullParser.START_TAG) {
                if (parser.getName().equals("map")) {
                    boolean isLinked = parser.getAttributeBooleanValue(null, "linked", false);

                    map = isLinked ? new LinkedHashMap<String, String>() : new HashMap<String, String>();
                } else if (parser.getName().equals("entry")) {
                    key = parser.getAttributeValue(null, "key");

                    if (null == key) {
                        parser.close();
                        return null;
                    }
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                if (parser.getName().equals("entry")) {
                    map.put(key, value);
                    key = null;
                    value = null;
                }
            } else if (eventType == XmlPullParser.TEXT) {
                if (null != key) {
                    value = parser.getText();
                }
            }
            eventType = parser.next();
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

    return map;
}
 
源代码15 项目: CrossMobile   文件: AndroidFont.java
@SuppressWarnings("UseSpecificCatch")
private static Map<String, Map<String, FontInfo>> fonts() {
    if (font_map != null)
        return font_map;

    font_map = new LinkedHashMap<>();

    Map<String, FontInfo> family = new LinkedHashMap<>();
    family.put("Sans Serif Regular", new FontInfo(false, false, Typeface.SANS_SERIF));
    family.put("Sans Serif Italic", new FontInfo(false, true, Typeface.SANS_SERIF));
    family.put("Sans Serif Bold", new FontInfo(true, false, Typeface.SANS_SERIF));
    family.put("Sans Serif Bold Italic", new FontInfo(true, true, Typeface.SANS_SERIF));
    font_map.put("Sans Serif", family);

    family = new LinkedHashMap<>();
    family.put("Serif", new FontInfo(false, false, Typeface.SERIF));
    font_map.put("Serif", family);

    family = new LinkedHashMap<>();
    family.put("Monospace", new FontInfo(false, false, Typeface.MONOSPACE));
    font_map.put("Monospace", family);

    XmlResourceParser parser = MainActivity.current.getResources().getXml(AndroidFileBridge.getResourceID("xml", "fontlist"));
    try {
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_TAG:
                    if (parser.getName().equals("font")) {
                        String file = parser.getAttributeValue(null, "file");
                        String familyname = parser.getAttributeValue(null, "family");
                        String name = parser.getAttributeValue(null, "name");
                        boolean bold = parser.getAttributeBooleanValue(null, "bold", false);
                        boolean italic = parser.getAttributeBooleanValue(null, "italic", false);
                        family = font_map.get(familyname);
                        if (family == null) {
                            family = new LinkedHashMap<>();
                            font_map.put(familyname, family);
                        }
                        family.put(name, new FontInfo(bold, italic, file));
                    }
                    break;
                default:
                    break;
            }
            eventType = parser.next();
        }
        parser.close();
    } catch (Exception e) {
    }
    return font_map;
}
 
源代码16 项目: LicenseView   文件: ParseLicenseXml.java
public static List<License> Parse(XmlResourceParser parser)
		throws XmlPullParserException, IOException {
	List<License> licenses = new ArrayList<License>();
	int event = parser.getEventType();

	String name = null;
	String type = null;
	String license = null;

	while (event != XmlResourceParser.END_DOCUMENT) {
		if (event == XmlResourceParser.START_TAG) {
			if (!parser.getName().equals(TAG_ROOT)
					&& !parser.getName().equals(TAG_CHILD))
				throw new XmlPullParserException(
						"Error in xml: tag isn't '" + TAG_ROOT + "' or '"
								+ TAG_CHILD + "' at line:"
								+ parser.getLineNumber());
			name = parser.getAttributeValue(null, ATTR_NAME);
			type = parser.getAttributeValue(null, ATTR_TYPE);
		} else if (event == XmlResourceParser.TEXT) {
			license = parser.getText();
		} else if (event == XmlResourceParser.END_TAG) {
			if (name != null && type != null && license != null
					&& !parser.getName().equals(TAG_ROOT)) {
				if (type.equals(VALUE_FILE)) {
					licenses.add(new License(name, License.TYPE_FILE,
							license));
					System.out.println(name);
				} else if (type.equals(VALUE_LIBRARY)) {
					licenses.add(new License(name, License.TYPE_LIBRARY,
							license));
					System.out.println(name);
				} else {
					throw new XmlPullParserException(
							"Error in xml: 'type' isn't valid at line:"
									+ parser.getLineNumber());
				}
			} else if (name == null) {
				throw new XmlPullParserException(
						"Error in xml: doesn't contain a 'name' at line:"
								+ parser.getLineNumber());
			} else if (type == null) {
				throw new XmlPullParserException(
						"Error in xml: doesn't contain a 'type' at line:"
								+ parser.getLineNumber());
			} else if (license == null){
				throw new XmlPullParserException(
						"Error in xml: doesn't contain a 'license text' at line:"
								+ parser.getLineNumber());
			}
		}
		event = parser.next();
	}
	parser.close();
	return licenses;
}
 
源代码17 项目: guideshow   文件: FileProvider.java
/**
 * Parse and return {@link PathStrategy} for given authority as defined in
 * {@link #META_DATA_FILE_PROVIDER_PATHS} {@code &lt;meta-data>}.
 *
 * @see #getPathStrategy(Context, String)
 */
private static PathStrategy parsePathStrategy(Context context, String authority)
        throws IOException, XmlPullParserException {
    final SimplePathStrategy strat = new SimplePathStrategy(authority);

    final ProviderInfo info = context.getPackageManager()
            .resolveContentProvider(authority, PackageManager.GET_META_DATA);
    final XmlResourceParser in = info.loadXmlMetaData(
            context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);
    if (in == null) {
        throw new IllegalArgumentException(
                "Missing " + META_DATA_FILE_PROVIDER_PATHS + " meta-data");
    }

    int type;
    while ((type = in.next()) != END_DOCUMENT) {
        if (type == START_TAG) {
            final String tag = in.getName();

            final String name = in.getAttributeValue(null, ATTR_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);
            }
        }
    }

    return strat;
}
 
源代码18 项目: ReminderDatePicker   文件: DateSpinner.java
@Override
protected @Nullable TwinTextItem parseItemFromXmlTag(@NonNull XmlResourceParser parser) {
    if(!parser.getName().equals(XML_TAG_DATEITEM)) {
        Log.d("DateSpinner", "Unknown xml tag name: " + parser.getName());
        return null;
    }

    // parse the DateItem, possible values are
    String text = null;
    @StringRes int textResource = NO_ID, id = NO_ID;
    Calendar date = Calendar.getInstance();
    for(int i=parser.getAttributeCount()-1; i>=0; i--) {
        String attrName = parser.getAttributeName(i);
        switch (attrName) {
            case XML_ATTR_ID:
                id = parser.getIdAttributeResourceValue(NO_ID);
                break;
            case XML_ATTR_TEXT:
                text = parser.getAttributeValue(i);
                // try to get a resource value, the string is retrieved below
                if(text != null && text.startsWith("@"))
                    textResource = parser.getAttributeResourceValue(i, NO_ID);
                break;

            case XML_ATTR_ABSDAYOFYEAR:
                final int absDayOfYear = parser.getAttributeIntValue(i, -1);
                if(absDayOfYear > 0)
                    date.set(Calendar.DAY_OF_YEAR, absDayOfYear);
                break;
            case XML_ATTR_ABSDAYOFMONTH:
                final int absDayOfMonth = parser.getAttributeIntValue(i, -1);
                if(absDayOfMonth > 0)
                    date.set(Calendar.DAY_OF_MONTH, absDayOfMonth);
                break;
            case XML_ATTR_ABSMONTH:
                final int absMonth = parser.getAttributeIntValue(i, -1);
                if(absMonth >= 0)
                    date.set(Calendar.MONTH, absMonth);
                break;
            case XML_ATTR_ABSYEAR:
                final int absYear = parser.getAttributeIntValue(i, -1);
                if(absYear >= 0)
                    date.set(Calendar.YEAR, absYear);
                break;

            case XML_ATTR_RELDAY:
                final int relDay = parser.getAttributeIntValue(i, 0);
                date.add(Calendar.DAY_OF_YEAR, relDay);
                break;
            case XML_ATTR_RELMONTH:
                final int relMonth = parser.getAttributeIntValue(i, 0);
                date.add(Calendar.MONTH, relMonth);
                break;
            case XML_ATTR_RELYEAR:
                final int relYear = parser.getAttributeIntValue(i, 0);
                date.add(Calendar.YEAR, relYear);
                break;
            default:
                Log.d("DateSpinner", "Skipping unknown attribute tag parsing xml resource: "
                        + attrName + ", maybe a typo?");
        }
    }// end for attr

    // now construct the date item from the attributes

    // check if we got a textResource earlier and parse that string together with the weekday
    if(textResource != NO_ID)
        text = getWeekDay(date.get(Calendar.DAY_OF_WEEK), textResource);

    // when no text is given, format the date to have at least something to show
    if(text == null || text.equals(""))
        text = formatDate(date);

    return new DateItem(text, date, id);
}
 
源代码19 项目: Phantom   文件: AndroidManifestParser.java
private static String getNameAttrValue(XmlResourceParser parser) {
    return parser.getAttributeValue(NAMESPACE_ANDROID, "name");
}
 
源代码20 项目: adt-leanback-support   文件: FileProvider.java
/**
 * Parse and return {@link PathStrategy} for given authority as defined in
 * {@link #META_DATA_FILE_PROVIDER_PATHS} {@code &lt;meta-data>}.
 *
 * @see #getPathStrategy(Context, String)
 */
private static PathStrategy parsePathStrategy(Context context, String authority)
        throws IOException, XmlPullParserException {
    final SimplePathStrategy strat = new SimplePathStrategy(authority);

    final ProviderInfo info = context.getPackageManager()
            .resolveContentProvider(authority, PackageManager.GET_META_DATA);
    final XmlResourceParser in = info.loadXmlMetaData(
            context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);
    if (in == null) {
        throw new IllegalArgumentException(
                "Missing " + META_DATA_FILE_PROVIDER_PATHS + " meta-data");
    }

    int type;
    while ((type = in.next()) != END_DOCUMENT) {
        if (type == START_TAG) {
            final String tag = in.getName();

            final String name = in.getAttributeValue(null, ATTR_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);
            }
        }
    }

    return strat;
}