Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發之選擇聯系人並返回電話號碼

android開發之選擇聯系人並返回電話號碼

編輯:關於Android編程

在跟著這個教程聯系的時候,它所用到的選擇聯系人方式是自己從數據庫裡把聯系人讀取出來,然後用listview顯示,選擇後返回手機號碼,

這樣做在點擊選擇聯系人的時候,需要時間去加載,並且顯示出來的聯系人好像並不全,

總之感覺不好,想通過調用系統聯系人的方式選擇,不用自己去處理界面。

結果還不錯:

MainActivity:

package jason.pickcontact;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	Button pick;
	TextView show;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		pick = (Button) findViewById(R.id.pick);
		show = (TextView) findViewById(R.id.show);
		pick.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(Intent.ACTION_PICK,
						ContactsContract.Contacts.CONTENT_URI);
				MainActivity.this.startActivityForResult(intent, 1);
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
		case 1:
			if (resultCode == RESULT_OK) {
				Uri contactData = data.getData();
				Cursor cursor = managedQuery(contactData, null, null, null,
						null);
				cursor.moveToFirst();
				String num = this.getContactPhone(cursor);
				show.setText("所選手機號為:" + num);
			}
			break;

		default:
			break;
		}
	}

	private String getContactPhone(Cursor cursor) {
		// TODO Auto-generated method stub
		int phoneColumn = cursor
				.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
		int phoneNum = cursor.getInt(phoneColumn);
		String result = "";
		if (phoneNum > 0) {
			// 獲得聯系人的ID號
			int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
			String contactId = cursor.getString(idColumn);
			// 獲得聯系人電話的cursor
			Cursor phone = getContentResolver().query(
					ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
					null,
					ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
							+ contactId, null, null);
			if (phone.moveToFirst()) {
				for (; !phone.isAfterLast(); phone.moveToNext()) {
					int index = phone
							.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
					int typeindex = phone
							.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
					int phone_type = phone.getInt(typeindex);
					String phoneNumber = phone.getString(index);
					result = phoneNumber;
//					switch (phone_type) {//此處請看下方注釋
//					case 2:
//						result = phoneNumber;
//						break;
//
//					default:
//						break;
//					}
				}
				if (!phone.isClosed()) {
					phone.close();
				}
			}
		}
		return result;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

關於phone_type有些問題,聯系人中把手機號存儲的類型不同的話,phone_type也不同,一般來說手機那一欄的類型是2,

但是用2發現有的選不出來,去聯系人查看才發現,好多聯系人我並沒有把號碼存到手機這一欄,而是存在電話或者存為了其他類型,

把各種類型都存了電話測試發現,我手機是miui系統,手機那一欄的TYPE是2,住宅的TYPE是3和1,總機的TYPE是12和7,其他是7

在模擬器上用原生系統,發現mobile是2,home是1,work是3,other是7

不同系統有些差別,畢竟都有過改動,不過手機是2應該是沒問題的,由於我存儲的類型不對,所以我把代碼中正確的注釋掉了,沒有判斷類型就使用了。

標准來說的話,加一個類型2判斷是對的。

關於聯系人的數據庫中的復雜關系沒搞懂。先放著吧。

activity_main.xml:



    

    


作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.csdn.net/jason0539(轉載請說明出處)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved