Android 获取通讯录所有的联系人的方法 json打印的就是这些数据

private void readContacts() throws JSONException {
		// 首先,从raw_contacts中读取联系人的id("contact_id")
		// 其次,根据contact_id从data表中查询出相应的电话号码和联系人名称
		// 然后,根据mimetype来区分哪个是联系人,哪个是电话号码
		// Uri rawContactsUri = Uri
		// .parse("content://com.android.contacts/raw_contacts");

		contacts = new ArrayList<HashMap<String, String>>();

		// 从raw_contacts中读取联系人的id("contact_id")
		Cursor rawContactsCursor = getContentResolver().query(
				ContactsContract.RawContacts.CONTENT_URI,
				new String[] { "contact_id", "sort_key" }, null, null,
				"sort_key");	//按sort_key排序

		if (rawContactsCursor != null) {
			while (rawContactsCursor.moveToNext()) {
				String contactId = rawContactsCursor.getString(0);
				// System.out.println(contactId);
				if (contactId != null) {
					// 曾经有过,已经删除的联系人在raw_contacts表中记录仍在,但contact_id值为null
					// 根据contact_id从data表中查询出相应的电话号码和联系人名称
					// Uri dataUri = Uri
					// .parse("content://com.android.contacts/data");
					Cursor dataCursor = getContentResolver().query(
							ContactsContract.Data.CONTENT_URI,
							new String[] { "data1", "mimetype" },
							"contact_id=?", new String[] { contactId }, null);

					if (dataCursor != null) {
						HashMap<String, String> map = new HashMap<String, String>();

						while (dataCursor.moveToNext()) {
							String data1 = dataCursor.getString(0);
							String mimetype = dataCursor.getString(1);

							if ("vnd.android.cursor.item/phone_v2"
									.equals(mimetype))
								map.put("phone", data1);
							else if ("vnd.android.cursor.item/name"
									.equals(mimetype))
								map.put("name", data1);
						}
						contacts.add(map);
					}
					dataCursor.close();
				}
			}
			Gson gson = new Gson();
			String json=gson.toJson(contacts);
			Log.e("json",json);
			rawContactsCursor.close();
		}
	}



package com.vincentf.contact;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class MainActivity extends Activity {


    private ArrayList<HashMap<String, String>> contacts;

    private String data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        getjson();
        readContacts();
    }

    private void readContacts() {
        contacts = new ArrayList<HashMap<String, String>>();
        Cursor rawContactsCursor = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, new String[]{"contact_id", "sort_key"}, null, null, "sort_key");    //按sort_key排序
        if (rawContactsCursor != null) {
            while (rawContactsCursor.moveToNext()) {
                String contactId = rawContactsCursor.getString(0);
                // System.out.println(contactId);
                if (contactId != null) {
                    Cursor dataCursor = getContentResolver().query(
                            ContactsContract.Data.CONTENT_URI, new String[]{"data1", "mimetype"},
                            "contact_id=?", new String[]{contactId}, null);
                    if (dataCursor != null) {
                        HashMap<String, String> map = new HashMap<String, String>();

                        while (dataCursor.moveToNext()) {
                            String data1 = dataCursor.getString(0);
                            String mimetype = dataCursor.getString(1);
//                            Gson gson = new Gson();
//                           final  String json1=gson.toJson(data1);
                            data = data1;
                            if ("vnd.android.cursor.item/phone_v2".equals(mimetype))
                                map.put("phone", data1);
                            else if ("vnd.android.cursor.item/name".equals(mimetype))
                                map.put("name", data1);
                        }
                        contacts.add(map);
                    }
                    dataCursor.close();
                }
            }

            JSONArray arr = new JSONArray();
            for(Map<String, String> map : contacts){
                JSONObject obj = new JSONObject(map);
                arr.put(obj);
            }
            JSONObject result = new JSONObject();
            try {
                result.put("contacts", arr);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            Log.e("自定义的json",result.toString());
        }


    }

//    private void getjson() {
//        JSONObject jsonObject = new JSONObject();
//        JSONArray jsonArray = new JSONArray();
//        JSONObject object_1 = new JSONObject();
//        JSONObject object_2 = new JSONObject();
//        JSONObject object_3 = new JSONObject();
//        try {
//            object_1.put("id", "3");
//            object_1.put("id1", "1");
//            object_1.put("id2", "2");
//            object_2.put("id3", "3");
//            object_2.put("id4", "4");
//            object_2.put("id5", "5");
//            object_3.put("id6", "6");
//            object_3.put("i7", "7");
//            object_3.put("id8", "9");
//            jsonArray.put(object_1);
//            jsonArray.put(object_2);
//            jsonArray.put(object_3);
//            jsonObject.put("la", jsonArray);
//            jsonObject.put("qita", "5666666");
//        } catch (JSONException e) {
//            e.printStackTrace();
//        } Log.e("自定义的json", jsonObject.toString());
//    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 11中,PBAP获取通讯录方法与之前的版本略有不同。以下是使用PBAP获取通讯录的步骤: 1. 确保设备支持PBAP协议,并且已经连接到目标设备。可以使用BluetoothAdapter.getDefaultAdapter().getProfileProxy()方法获取PBAP代理对象。 2. 使用PBAP代理对象的requestPhonebook()方法请求电话簿。该方法需要传入一个电话簿类型参数,例如ContactsContract.PBAP_VCARD_TYPE。 3. PBAP代理对象会异步返回电话簿数据。可以使用ContentResolver.insert()方法数据插入到设备的联系人数据库中。 以下是一个示例代码: ```java BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); BluetoothPbapClient pbapClient = null; bluetoothAdapter.getProfileProxy(context, new BluetoothProfile.ServiceListener() { @Override public void onServiceConnected(int profile, BluetoothProfile proxy) { if(profile == BluetoothProfile.PBAP_CLIENT) { pbapClient = (BluetoothPbapClient) proxy; pbapClient.start(); pbapClient.setPriority(device, BluetoothProfile.PRIORITY_AUTO_CONNECT); pbapClient.requestPhonebook(device, ContactsContract.PBAP_VCARD_TYPE); } } @Override public void onServiceDisconnected(int profile) { if(profile == BluetoothProfile.PBAP_CLIENT) { pbapClient = null; } } }); ContentValues values = new ContentValues(); values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, null); values.put(ContactsContract.RawContacts.ACCOUNT_NAME, null); Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); String selectPhone = ContactsContract.Data.RAW_CONTACT_ID + " = " + rawContactId + " AND " + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'"; values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber); values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); ``` 需要注意的是,Android 11中的PBAP获取通讯录需要用户授权。因此,在使用PBAP获取通讯录时,需要请求相应的权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值