前一段時間,研究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加入相應的權限:
- <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);
- }
-
-
- }