Cómo utilizar el código de Android para convertir caracteres chinos a Pinyin
Utilice la clase HanziToPinyin para implementar código de Android para convertir caracteres chinos a Pinyin.
Cualquiera que sepa sobre contactos sabe que cada contacto tiene un campo sort_key si sortOrder no está configurado en la consulta. De forma predeterminada, el campo sort_key se utiliza como base de clasificación. La recuperación de nombres también se realiza en función de sort_key (como la coincidencia aproximada del marcador: de números a letras, pinyin y, finalmente, caracteres chinos). sort_key se genera en función del nombre: si el nombre del contacto contiene letras, entonces sort_key es el mismo que el nombre; si el nombre es caracteres chinos, genera sort_key,pinyin - caracteres chinos - Pinyin. genera sort_key,pinyin - caracteres chinos - Pinyin. El pinyin está todo en mayúscula, separado por espacios, por ejemplo: "Zhang San" -----sort_key: "Zhang San".
Cuando se cambia el nombre, la clave Sort_key se genera en paquetes/providers/ContactsProvider/src/com/android/providers/contacts/ContactsProvider2.java.
La llamada específica es la siguiente:
[java]?view Plaincopyprint?
if?(displayNameStyle?==?FullNameStyle.CHINESE?||
displayNameStyle ?== ?FullNameStyle.CJK)?{
sortKeyPrimary?=?sortKeyAlternative?=
ContactLocaleUtils.getIntance().getSortKey(
displayNamePrimary,?displayNameStyle );
}
Paquetes de llamadas\providers\contactsprovider\srccom\androidproviders\contacts\ContactLocaleUtils.java en el método ChineseContactUtils.getSortKey() se implementa de la siguiente manera:
[java ]?view Plaincopyprint?
ContactLocaleUtils.getIntance();
Obtenga la instancia y luego llame a:
[java]?view Plaincopyprint?
1. public?String?getSortKey(String?displayName,?int?nameStyle)?{
return?getForSort(Integer.valueOf(nameStyle)).getSortKey(displayName);
}
2.@Override
¿público?String?getSortKey(String?displayName)?{
ArrayList
if?(tokens?! =?null?&&?tokens.size()? >?0)?{
¿StringBuilder? {
//?¿Poner?¿Pinyin?del?personaje chino,¿entonces?{
si?(sb.length()?{
sb.append('?') ;
}
sb.append(token.target);
sb.append('?') ;
sb.append(token.source);
} más?{
sb.append('?'); }
sb.append(token.source);
}
}
}
¿regresar? super.getSortKey( displayName );
}
Lo anterior llama al método en frameworks/base/core/java/com/android/internal/util/HanziToPinyin.java (la fuente El código es el siguiente) para obtener pinyin, por supuesto, la implementación de la conversión requiere soporte nativo. Como puede ver en la ruta, HanziToPinyin.java es una clase interna y no se puede llamar directamente, pero puede sacar este archivo y usarlo directamente en su propio proyecto.
La llamada también es muy simple y conveniente. Básicamente, quedará más claro si observa el código fuente de HanziToPinyin. La siguiente es una llamada que escribí: ingrese el carácter chino cuyo pinyin se devolverá, y las letras se devolverán tal como están, convertidas a minúsculas (el pinyin obtenido por defecto es todo en mayúsculas).
[java]?view Plaincopyprint?Token pinyin de caracteres chinos;
public?class?PinYin?{
//Los caracteres chinos se devuelven en pinyin y las letras son como son Retorno, todas convertidas a minúsculas (por defecto el pinyin obtenido es todo en mayúsculas)
public?static?String?getPinYin(String?input)?{
ArrayList
StringBuilder?sb?=?new?StringBuilder();
if?(tokens?! =? null?&&?tokens .size()? >?0)?{
para(Token?){
si?(Token.PINYIN?==?token.type) ?{
sb.append(token.target);
} ¿más?{
sb.append(token.source);
} p>
}
}
}
}
}
¿Volver?