Android 点击按钮读取手机联系人并绑定到ListView中和点击按钮跳转系统联系人界面选中绑定至TextView

根据内容访问者(接受者)取得系统联系人,取得系统的信息,联系人,图片等都有特定的Uri,取得联系人的uri:
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");注意格式,因为是获得系统资源,
肯定是需要权限的,所以在清单文件中要把权限添加好,这次将两个写在一起了!
 
 
主要的布局文件
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/bt_main_id"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="getData"
            android:text="获取手机联系人"
            />
        <Button
            android:id="@+id/bt_main_xitong"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="获取手机系统联系人"
            android:onClick="myData"
            />
    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_main_myTextOne"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_main_myTextTwo"/>

    <ListView
        android:id="@+id/lv_main_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>


当然还不能少了ListView的布局
 <TextView
        android:id="@+id/tv_main_text1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3" />

    <TextView
        android:id="@+id/tv_main_text2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3" />

    <TextView
        android:id="@+id/tv_main_text3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="4" />

最主要的代码,代码含义都有注释就不多做详解了
public class MainActivity extends AppCompatActivity {

    private ContentResolver contentResolver;
    private ListView listView;
    private Cursor cursorData;
    private Button bt_main_id;
    private String name;
    private List<Map<String, Object>> list = new ArrayList<>();
    private Button bt_main_xitong;
    private TextView tv_main_myTextOne;
    private TextView tv_main_myTextTwo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获得内容访问者
        contentResolver = getContentResolver();
        //本来为了性能问题应该提出去的,偷了点懒
        listView = (ListView) findViewById(R.id.lv_main_list);
        bt_main_id = (Button) findViewById(R.id.bt_main_id);
        bt_main_xitong = (Button) findViewById(R.id.bt_main_xitong);
        //下面是TextView中的两个按钮
        tv_main_myTextOne = (TextView) findViewById(R.id.tv_main_myTextOne);
        tv_main_myTextTwo = (TextView) findViewById(R.id.tv_main_myTextTwo);
        //点击获得手机联系人并绑定到Listview中
        bt_main_id.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
                Cursor cursor = contentResolver.query(uri, null, null, null, null);
                while (cursor.moveToNext()) {
                    int id = cursor.getInt(cursor.getColumnIndex("_id"));
                    //取得姓名
                    name = cursor.getString(cursor.getColumnIndex("display_name"));
                    Log.i("test", id + "      " + name);

                    Uri uriData = Uri.parse("content://com.android.contacts/raw_contacts/" + id + "/data");
                    cursorData = contentResolver.query(uriData, null, null, null, null);
                    while (cursorData.moveToNext()) {
                        //取得电话号码
                        String data = cursorData.getString(cursorData.getColumnIndex("data1"));
                        //取得的类型,如果是(vnd.android.cursor.item/phone_v2)则是电话号码
                        String type_id = cursorData.getString(cursorData.getColumnIndex("mimetype"));
                        if ("vnd.android.cursor.item/phone_v2".equals(type_id)) {
                            Log.i("test", data + "     " + type_id);
                            Map<String, Object> map = new HashMap<String, Object>();
                            map.put("id", id);
                            map.put("name", name);
                            map.put("data", data);
                            list.add(map);
                        }
                    }
                }
                //设置适配器
                SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(), list, R.layout.moshi, new String[]{"id", "name", "data"}, new int[]{R.id.tv_main_text1, R.id.tv_main_text2, R.id.tv_main_text3});
                listView.setAdapter(simpleAdapter);
            }
        });

        //跳转系统联系人监听
        bt_main_xitong.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //使用隐试跳转,跳转后可以携带数据返回
                Uri uri = Uri.parse("content://contacts/people");
                Intent intent1 = new Intent(Intent.ACTION_PICK, uri);
                startActivityForResult(intent1, 1);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case 1:
                if (data == null) {
                    return;
                }
                //获取选择的联系人信息
                Uri uri = data.getData();
                String[] contacts = getPhoneContacts(uri);
                tv_main_myTextOne.setText(contacts[0]);
                tv_main_myTextTwo.setText(contacts[1]);
                break;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    private String[] getPhoneContacts(Uri uri) {
        String[] contact = new String[2];
        //得到ContentResolver对象
        ContentResolver contentResolver = getContentResolver();
        //取得电话本中开始一项的光标
        Cursor cursor = contentResolver.query(uri, null, null, null, null);
        if (cursor != null) {

            cursor.moveToFirst();
            //取得联系人姓名
            int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);;
            contact[0] = cursor.getString(nameFieldColumnIndex);
            //取得电话号码
            String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

            Cursor phone = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);

            if (phone != null) {
                phone.moveToFirst();
                contact[1] = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
//                for (int i = 0; i < phone.getColumnCount(); i++) {
//                    Log.i("test",phone.getColumnName(i)+""+phone.getString(i));
//                }
            }
            phone.close();
            cursor.close();
        } else {
            return null;
        }
        return contact;
    }
}


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值