Android输入汉字得到拼音

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

Android输入汉字得到拼音

不好意思,我的模拟器不能输入中文,如果是中文名“张三”,它在这一列的存放形式应该是“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);       }             }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjxjd.html