Android输入汉字得到拼音

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

 

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

那么我的具体思路如下:

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);
	}
	

}


 输入汉字得到拼音工程及查看contacts2.db软件,教程.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值