歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android輸入漢字得到拼音

Android輸入漢字得到拼音

日期:2017/3/1 10:41:36   编辑:Linux編程

前一段時間,研究Android的通訊錄,在它的contacts2.db數據庫中發現raw_contacts表中有sort_key這一列用於排序的漢語拼音等信息,就突然想到我們可以利用它得到漢字相應的拼音.

不好意思,我的模擬器不能輸入中文,如果是中文名“張三”,它在這一列的存放形式應該是“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. import android.app.Activity;
  3. import android.content.ContentUris;
  4. import android.content.ContentValues;
  5. import android.database.Cursor;
  6. import android.net.Uri;
  7. import android.os.Bundle;
  8. import android.provider.ContactsContract;
  9. import android.provider.ContactsContract.CommonDataKinds.StructuredName;
  10. import android.provider.ContactsContract.Data;
  11. import android.provider.ContactsContract.RawContacts;
  12. import android.view.View;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.ImageButton;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. public class PinyinActivity extends Activity {
  19. /** Called when the activity is first created. */
  20. EditText et;
  21. Button bt;
  22. TextView tv;
  23. @Override
  24. public void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. bt=(Button)findViewById(R.id.bt);
  28. et=(EditText)findViewById(R.id.et);
  29. tv=(TextView)findViewById(R.id.tv);
  30. bt.setOnClickListener(new Button.OnClickListener(){
  31. @Override
  32. public void onClick(View v) {
  33. ContentValues values = new ContentValues();
  34. Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
  35. long rawContactId = ContentUris.parseId(rawContactUri);
  36. String name=et.getText().toString();
  37. if (name.length()!=0)
  38. {
  39. values.clear();
  40. values.put(Data.RAW_CONTACT_ID, rawContactId);
  41. values.put(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);
  42. values.put(StructuredName.GIVEN_NAME, name);
  43. getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
  44. hanziToPinyin(rawContactId);
  45. delete(rawContactId);
  46. }
  47. else{
  48. Toast.makeText(PinyinActivity.this ,"請輸入漢字!",Toast.LENGTH_SHORT).show();
  49. }
  50. }});
  51. }
  52. public void hanziToPinyin(long rawContactId){
  53. String result="";
  54. String Where = ContactsContract.RawContacts.CONTACT_ID+ " ="+rawContactId;
  55. String[] projection = {"sort_key" };
  56. Cursor cur = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, Where, null, null);
  57. int pinyin1=cur.getColumnIndex("sort_key");
  58. cur.moveToFirst();
  59. String pinyin=cur.getString(pinyin1);
  60. //因為此處得到的事ZHANG張SAN三這個形式,所以下面對這個字符串做處理,將它變成 zhang san
  61. for(int i=0;i<pinyin.length();i++){
  62. String temp=pinyin.substring(i,i+1);
  63. if(temp.matches("[a-zA-Z]")){
  64. result=result+temp;
  65. }
  66. else result=result+" ";
  67. }
  68. tv.setText(result.toLowerCase());
  69. }
  70. public void delete(long rawContactId)
  71. {
  72. getContentResolver().delete(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null, null);
  73. }
  74. }
Copyright © Linux教程網 All Rights Reserved