Решено ... Я создал новый класс, который расширяет VCardProvider
, и я проанализировал свой пользовательский тег в переопределенном методе parse
public class CustomVCardProvider extends VCardProvider {
private static final String[] TEL = new String[]{
"VOICE",
"FAX",
"PAGER",
"MSG",
"CELL",
"VIDEO",
"BBS",
"MODEM",
"ISDN",
"PCS",
"PREF",
};
private static final String[] ADR = new String[]{
"POSTAL",
"PARCEL",
"DOM",
"INTL",
"PREF",
"POBOX",
"EXTADR",
"STREET",
"LOCALITY",
"REGION",
"PCODE",
"CTRY",
"FF",
};
@Override
public VCard parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException {
VCard vCard = new VCard();
String name = null;
outerloop:
while (true) {
int eventType = parser.next();
switch (eventType) {
case XmlPullParser.START_TAG:
name = parser.getName();
switch (name) {
case CUSTOM_TAG:
parseCustomTag(parser, vCard);
break;
case "N":
parseName(parser, vCard);
break;
case "ORG":
parseOrg(parser, vCard);
break;
case "TEL":
parseTel(parser, vCard);
break;
case "ADR":
parseAddress(parser, vCard);
break;
case "EMAIL":
parseEmail(parser, vCard);
break;
case "NICKNAME":
vCard.setNickName(parser.nextText());
break;
case "JABBERID":
vCard.setJabberId(parser.nextText());
break;
case "PHOTO":
parsePhoto(parser, vCard);
break;
default:
break;
}
break;
case XmlPullParser.TEXT:
if (initialDepth + 1 == parser.getDepth()) {
vCard.setField(name, parser.getText());
}
break;
case XmlPullParser.END_TAG:
if (parser.getDepth() == initialDepth) {
break outerloop;
}
break;
default:
break;
}
}
return vCard;
}
Не забудьте скопировать все парсеры из исходного провайдераи добавьте ProviderManager.addIQProvider("vCard", "vcard-temp", new CustomVCardProvider());
после аутентификации