Android输入汉字得到拼音


前一段时间,研究Android的通讯录,在它的contacts2.db数据库中发现raw_contacts表中有sort_key这一列用于排序的汉语拼音等信息,就突然想到我们可以利用它得到汉字相应的拼音.

 

不好意思,我的模拟器不能输入中文,如果是中文名“张三”,它在这一列的存放形式应该是“ZHANG张SAN三”

输入汉字得到拼音工程下载:

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /2012年资料/1月/1日/Android输入汉字得到拼音源码/

那么我的具体思路如下:

1,往表中插入汉字

2,查表,找到此字段,经过相应的处理,输出

3,删除此字段

contacts2.db中有好多表,想深入了解的,可以下载本文章结尾处的工程,里面有本文的工程,查看contacts2.db数据库的小软件及相应的教程!(ps:要想导出contacts2.db,模拟器必须先打开)

这里因为要对通讯录进行读写操作,所以在AndroidManifest.xml加入相应的权限:

  1. <uses-permission android:name="android.permission.READ_CONTACTS" />  
  2. <uses-permission android:name="android.permission.WRITE_CONTACTS" />   

闲话少说,贴代码:

  1. package com.pinyin;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.ContentUris;  
  5. import android.content.ContentValues;  
  6. import android.database.Cursor;  
  7. import android.net.Uri;  
  8. import android.os.Bundle;  
  9. import android.provider.ContactsContract;  
  10. import android.provider.ContactsContract.CommonDataKinds.StructuredName;  
  11. import android.provider.ContactsContract.Data;  
  12. import android.provider.ContactsContract.RawContacts;  
  13. import android.view.View;  
  14. import android.widget.Button;  
  15. import android.widget.EditText;  
  16. import android.widget.ImageButton;  
  17. import android.widget.TextView;  
  18. import android.widget.Toast;  
  19.   
  20. public class PinyinActivity extends Activity {  
  21.     /** Called when the activity is first created. */  
  22.     EditText et;  
  23.     Button bt;  
  24.     TextView tv;  
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.        setContentView(R.layout.main);  
  29.       bt=(Button)findViewById(R.id.bt);  
  30.        et=(EditText)findViewById(R.id.et);  
  31.       tv=(TextView)findViewById(R.id.tv);  
  32.        bt.setOnClickListener(new Button.OnClickListener(){  
  33.   
  34.             @Override  
  35.             public void onClick(View v) {  
  36.                  ContentValues values = new ContentValues();  
  37.                    Uri rawContactUri =  getContentResolver().insert(RawContacts.CONTENT_URI, values);  
  38.                     long rawContactId = ContentUris.parseId(rawContactUri);       
  39.                     String name=et.getText().toString();  
  40.                     if (name.length()!=0)  
  41.                     {  
  42.                         values.clear();  
  43.                         values.put(Data.RAW_CONTACT_ID, rawContactId);  
  44.                         values.put(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);  
  45.                         values.put(StructuredName.GIVEN_NAME, name);  
  46.                         getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);  
  47.                         hanziToPinyin(rawContactId);  
  48.                         delete(rawContactId);  
  49.                     }  
  50.                     else{  
  51.                         Toast.makeText(PinyinActivity.this ,"请输入汉字!",Toast.LENGTH_SHORT).show();  
  52.                     }  
  53.                   
  54.                   
  55.             }});  
  56.           
  57.     }  
  58.     public void hanziToPinyin(long rawContactId){  
  59.         String result="";  
  60.         String Where = ContactsContract.RawContacts.CONTACT_ID+ " ="+rawContactId;  
  61.         String[] projection = {"sort_key" };  
  62.         Cursor cur = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, Where, null, null);  
  63.         int pinyin1=cur.getColumnIndex("sort_key");  
  64.         cur.moveToFirst();  
  65.         String pinyin=cur.getString(pinyin1);  
  66.         //因为此处得到的事ZHANG张SAN三这个形式,所以下面对这个字符串做处理,将它变成 zhang san  
  67.         for(int i=0;i<pinyin.length();i++){  
  68.         String temp=pinyin.substring(i,i+1);  
  69.             if(temp.matches("[a-zA-Z]")){  
  70.                 result=result+temp;  
  71.             }  
  72.             else result=result+" ";  
  73.         }  
  74.        tv.setText(result.toLowerCase());  
  75.     }  
  76.     public void delete(long rawContactId)  
  77.     {  
  78.         getContentResolver().delete(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null, null);  
  79.     }  
  80.       
  81.   
  82. }  

相关内容