前一段时间,研究Android的通讯录,在它的contacts2.db数据库中发现raw_contacts表中有sort_key这一列用于排序的汉语拼音等信息,就突然想到我们可以利用它得到汉字相应的拼音.
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-01/50681.htm



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

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

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

用户名与密码都是www.linuxidc.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.}

本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-01/50681.htm

更多相关文章

  1. android 模拟器对应像素
  2. Android 开发入门问题集:启动模拟器、安装卸载apk、项目调试、导
  3. Android模拟器——QEMU
  4. Android运行模拟器

随机推荐

  1. 有关Android线程的学习
  2. Github项目解析(二)-->将Android项目发布至
  3. Android系统
  4. Android系统的体系结构、开发语言及源码
  5. [Android] 为Android安装BusyBox —— 完
  6. Android进程注入
  7. [Android] ListView (普通列表控件) 的基
  8. Google Cloud Messaging (Android(安卓)
  9. Android系列学习:handler,HandlerThread
  10. 【Unity3d】Unity5与Android交互通信(使用