Android输入汉字得到拼音
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加入相应的权限:
- <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);
- }
- }
评论暂时关闭