前一段时间,研究Android的通讯录,在它的contacts2.db数据库中发现raw_contacts表中有sort_key这一列用于排序的汉语拼音等信息,就突然想到我们可以利用它得到汉字相应的拼音.
不好意思,我的模拟器不能输入中文,如果是中文名“张三”,它在这一列的存放形式应该是“ZHANG张SAN三”
输入汉字得到拼音工程下载:
具体下载目录在 /2012年资料/1月/1日/Android输入汉字得到拼音源码/
那么我的具体思路如下:
1,往表中插入汉字
2,查表,找到此字段,经过相应的处理,输出
3,删除此字段
contacts2.db中有好多表,想深入了解的,可以下载本文章结尾处的工程,里面有本文的工程,查看contacts2.db数据库的小软件及相应的教程!(ps:要想导出contacts2.db,模拟器必须先打开)
这里因为要对通讯录进行读写操作,所以在AndroidManifest.xml加入相应的权限:
闲话少说,贴代码:
package com.pinyin;
import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class PinyinActivity extends Activity {
/** Called when the activity is first created. */
EditText et;
Button bt;
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bt=(Button)findViewById(R.id.bt);
et=(EditText)findViewById(R.id.et);
tv=(TextView)findViewById(R.id.tv);
bt.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
ContentValues values = new ContentValues();
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
String name=et.getText().toString();
if (name.length()!=0)
{
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, name);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
hanziToPinyin(rawContactId);
delete(rawContactId);
}
else{
Toast.makeText(PinyinActivity.this ,"请输入汉字!",Toast.LENGTH_SHORT).show();
}
}});
}
public void hanziToPinyin(long rawContactId){
String result="";
String Where = ContactsContract.RawContacts.CONTACT_ID+ " ="+rawContactId;
String[] projection = {"sort_key" };
Cursor cur = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, Where, null, null);
int pinyin1=cur.getColumnIndex("sort_key");
cur.moveToFirst();
String pinyin=cur.getString(pinyin1);
//因为此处得到的事ZHANG张SAN三这个形式,所以下面对这个字符串做处理,将它变成 zhang san
for(int i=0;i
String temp=pinyin.substring(i,i+1);
if(temp.matches("[a-zA-Z]")){
result=result+temp;
}
else result=result+" ";
}
tv.setText(result.toLowerCase());
}
public void delete(long rawContactId)
{
getContentResolver().delete(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null, null);
}
}