Android讀取選擇聯系人的模版代碼實現

n6xb 9年前發布 | 3K 次閱讀 Java Android

1、創建SelectContactActivity類,在AndroidManifest.xml添加類

    import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;  
import android.content.ContentResolver;  
import android.content.Intent;  
import android.database.Cursor;  
import android.net.Uri;  
import android.os.Bundle;  
import android.view.View;  
import android.widget.AdapterView;  
import android.widget.AdapterView.OnItemClickListener;  
import android.widget.ListView;  
import android.widget.SimpleAdapter;  

public class SelectContactActivity extends Activity {  

    private ListView lv_select_contact;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_select_contact);  
        lv_select_contact = (ListView) findViewById(R.id.lv_select_contact);  
        final List<Map<String,String>> data = getContactInfo();  
        lv_select_contact.setAdapter(new SimpleAdapter(this, data, R.layout.contact_item_view,  
                new String[]{"name","phone"}, new int[]{R.id.tv_name,R.id.tv_phone}));  
        lv_select_contact.setOnItemClickListener(new OnItemClickListener() {  

            @Override  
            public void onItemClick(AdapterView<?> parent, View view, int position,  
                    long id) {  
                String phone = data.get(position).get("phone");  
                Intent data = new Intent();  
                data.putExtra("phone", phone);  
                setResult(0, data);  
                //關閉掉當前的頁面  
                finish();  
            }  

        });  
    }  

    /** 
     * 讀取手機里面的聯系人 
     * @return 
     */  
    private List<Map<String, String>> getContactInfo() {  
        List<Map<String, String>> list = new ArrayList<Map<String,String>>();  

        //得到一個內容解析器  
        ContentResolver resolver = getContentResolver();  
        //raw_contact uri  
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");  
        Uri uriData = Uri.parse("content://com.android.contacts/data");  

        Cursor cursor = resolver.query(uri, new String[]{"contact_id"}, null, null, null);  
        while(cursor.moveToNext()){  

            String contact_id = cursor.getString(0);  

            if(contact_id != null){  
                //具體的某一個聯系人  
                Map<String, String> map =new HashMap<String, String>();  
                Cursor dataCursor = resolver.query(uriData, new String[]{"data1","mimetype"}, "contact_id=?", new String[]{contact_id}, null);  
                while(dataCursor.moveToNext()){  
                    String data1 = dataCursor.getString(0);  
                    String mimetype = dataCursor.getString(1);  
                    System.out.println("data1=="+data1+"mimetype=="+mimetype);  

                    if("vnd.android.cursor.item/name".equals(mimetype)){  
                        //聯系人的姓名  
                        map.put("name", data1);  
                    }else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){  
                        //聯系人的電話號碼  
                        map.put("phone", data1);  
                    }  
                }  
                list.add(map);  
                dataCursor.close();  
            }  
        }  
        cursor.close();  
        return list;  
    }  
}  </pre> 


2、讀取聯系人需要獲得權限

添加權限:<uses-permission android:name="android.permission.READ_CONTACTS"/>

3、前面java需要引入相關layout,模版如下注意姓名號碼id:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="vertical" >  

        <TextView  
            android:background="#8866ff00"  
            android:gravity="center"  
            android:textColor="#000000"  
            android:textSize="20sp"  
            android:id="@+id/textView1"  
            android:layout_width="fill_parent"  
            android:layout_height="55dip"  
            android:text="選擇聯系人"/>  

        <ListView   
            android:verticalSpacing="10dip"  
            android:layout_marginTop="15dip"  
            android:numColumns="3"  
            android:id="@+id/lv_select_contact"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent"  
            />  

    </LinearLayout>  

4、實現選擇聯系人的點擊事件

xml的Button中 android:onClick="selectContact" ,注意返回startActivityForresult()方法

     * 選擇聯系人的點擊事件  
     */  
    public void selectContact(View view){  
        Intent intent = new Intent(this,SelectContactActivity.class);  
        startActivityForResult(intent, 0);  
    }  

5、然后將點擊的聯系人投射到號碼輸入框

    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        // TODO Auto-generated method stub  
        super.onActivityResult(requestCode, resultCode, data);  

        if(data == null){  
            return ;  
        }  
        //et_setup3_phone是輸入框的id  
        String phone = data.getStringExtra("phone").replace("-", "");  
        et_setup3_phone.setText(phone);  
    }  

6、最后說下注意點

在獲取完號碼后,整個流程就結束了,在再次引用號碼時最好toString().trim()操作,然后如果有必要可以判空和保存,保存要注意commit()。

 本文由用戶 n6xb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!