前一段时间,研究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加入相应的权限:
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" />
闲话少说,贴代码:
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<pinyin.length();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); } }