linux 汉字输入 发音 源码,Android输入汉字得到拼音

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

3a2ace68c7e1f6454c56498d2b867224.gif

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

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

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

那么我的具体思路如下:

1,往表中插入汉字

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

3,删除此字段

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

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

闲话少说,贴代码:

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

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

}

}0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值