編輯:關於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(轉載請說明出處)
java/android 設計模式學習筆記(17)---策略模式
這篇博客我們來介紹一下策略模式(Strategy Pattern,或者叫 Policy Pattern),也是行為型模式之一。通常在軟件開發中,我們為了一個功能可能會設計
Android 實現遮罩
關鍵方法paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));說明canvas原有的圖可以理
Android GridViewd 簡單代碼實現
背景新項目的一個界面需要用到九宮格界面,每個Item包含一張圖片,下面是對應的文字描述,給每個Item設置點擊監聽器,當點擊時跳轉到相應的界面。於是想到使用Android
Android編程ProgressBar自定義樣式之動畫模式實現方法
本文實例講述了Android編程ProgressBar自定義樣式之動畫模式實現方法。分享給大家供大家參考,具體如下:忘記在哪裡看到的那位仁兄寫的,就是通過用動畫效果來實現