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;   
        }   
    }  

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()。

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Android View转换成图片保存详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。