歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android輸入漢字得到拼音

前一段時間,研究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.   
  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. }  
Copyright © Linux教程網 All Rights Reserved