根据号码取得联系人姓名
来源:互联网 发布:java b2c 源码 编辑:程序博客网 时间:2024/04/29 05:30
网上获取的:
* 根据电话号码取得联系人姓名 *//*public static String getContactNameByPhoneNumber(Context context,String address) {String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER };// 将自己添加到 msPeers 中Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection, // Which columns to return.ContactsContract.CommonDataKinds.Phone.NUMBER + " = '"+ address + "'", // WHERE clause.null, // WHERE clause value substitutionnull); // Sort order.if (cursor == null) {Log.d(TAG, "getPeople null");return null;}for (int i = 0; i < cursor.getCount(); i++) {cursor.moveToPosition(i);// 取得联系人名字int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);String name = cursor.getString(nameFieldColumnIndex);return name;}return null;}/** * 获取所有联系人内容 * * @param context * @param address * @return */ /*public static String getContacts(Context context) {StringBuilder sb = new StringBuilder();ContentResolver cr = context.getContentResolver();Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, null);if (cursor.moveToFirst()) {do {String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));// 第一条不用换行if (sb.length() == 0) {sb.append(name);} else {sb.append("\n" + name);}Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null);while (phones.moveToNext()) {String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));// 添加Phone的信息sb.append("\t").append(phoneNumber);}phones.close();} while (cursor.moveToNext());}cursor.close();return sb.toString();}
这段代码无法查找sim卡联系人的信息!而且cursor没有关闭,导致许多错误。
自己改良后的代码如下:
private static final Uri PHONES_WITH_PRESENCE_URI = Data.CONTENT_URI; private static final String[] CALLER_ID_PROJECTION = new String[] { Phone._ID, // 0 Phone.NUMBER, // 1 Phone.LABEL, // 2 Phone.DISPLAY_NAME, // 3 Phone.CONTACT_ID, // 4 Phone.CONTACT_PRESENCE, // 5 Phone.CONTACT_STATUS, // 6 Phone.NORMALIZED_NUMBER, // 7 Contacts.SEND_TO_VOICEMAIL // 8 }; private static final int PHONE_ID_COLUMN = 0; private static final int PHONE_NUMBER_COLUMN = 1; private static final int PHONE_LABEL_COLUMN = 2; private static final int CONTACT_NAME_COLUMN = 3; private static final int CONTACT_ID_COLUMN = 4; private static final int CONTACT_PRESENCE_COLUMN = 5; private static final int CONTACT_STATUS_COLUMN = 6; private static final int PHONE_NORMALIZED_NUMBER = 7; private static final int SEND_TO_VOICEMAIL = 8; private static final String CALLER_ID_SELECTION_EXACT_MATCH = " Data._ID IN " + " (SELECT DISTINCT lookup.data_id " + " FROM " + " (SELECT data_id, normalized_number, length(normalized_number) as len " + " FROM phone_lookup " + " WHERE normalized_number = ?) AS lookup " + " WHERE " + " (lookup.len <= ? AND " + " substr(?, ? - lookup.len + 1) = lookup.normalized_number))"; public static String getContactInfoForPhoneNumber(Context context, String number) { // TODO Auto-generated method stub String name = null; boolean isValidNumber = isWellFormedSmsAddress(number); if (isValidNumber) { number = PhoneNumberUtils.stripSeparators(number); } String normalizedNumber = PhoneNumberUtils.normalizeNumber(number); // / M: String matchNumber = PhoneNumberUtils.toCallerIDMinMatch(normalizedNumber); if (!TextUtils.isEmpty(normalizedNumber) && !TextUtils.isEmpty(matchNumber)) { String numberLen = String.valueOf(normalizedNumber.length()); String[] args = new String[] { normalizedNumber, numberLen, normalizedNumber, numberLen }; Cursor cursor = context.getContentResolver().query(PHONES_WITH_PRESENCE_URI, CALLER_ID_PROJECTION, CALLER_ID_SELECTION_EXACT_MATCH, args, null); if (cursor == null) { return null; } try { if (cursor.moveToFirst()) { name = cursor.getString(CONTACT_NAME_COLUMN); } } finally { } if (cursor != null) { cursor.close(); } } return name; } public static boolean isWellFormedSmsAddress(String address) { // MTK-START [mtk04070][120104][ALPS00109412]Solve // "can't send MMS with MSISDN in international format" // Merge from ALPS00089029 if (!isDialable(address)) { return false; } // MTK-END [mtk04070][120104][ALPS00109412]Solve // "can't send MMS with MSISDN in international format" String networkPortion = PhoneNumberUtils.extractNetworkPortion(address); return (!(networkPortion.equals("+") || TextUtils.isEmpty(networkPortion))) && isDialable(networkPortion); } private static boolean isDialable(String address) { for (int i = 0, count = address.length(); i < count; i++) { if (!isDialable(address.charAt(i))) { return false; } } return true; } private static boolean isDialable(char c) { return (c >= '0' && c <= '9') || c == '*' || c == '#' || c == '+' || c == 'N' || c == '(' || c == ')'; }
- 根据号码取得联系人姓名
- 安卓根据号码获取联系人姓名和头像
- Android根据电话号码取得联系人姓名及头像
- 根据电话号码获取联系人姓名
- Android读取联系人的姓名及号码
- 【android】通过号码获取联系人姓名
- 手机中预置联系人(姓名,号码,头像)
- 获取所有联系人的姓名以及号码
- 根据号码获取联系人名称
- 通过联系人号码获取联系人的姓名(android开发)
- Android中 根据电话号码获取联系人姓名
- 根据电话号码查找通讯录中联系人姓名
- android 根据短信地址匹配联系人姓名
- Android中根据电话号码取联系人姓名
- 根据姓名获取联系人的电话号码
- android根据号码获取联系人一些总结
- android示例之取得联系人的信息(姓名、电话)
- Android开发获取联系人信息&根据姓名查找电话%根据电话查找姓名
- andriod 自定义来电界面功能实现的一些思考。
- OCP-1Z0-053-V12.02-177题
- 进程控制
- rqnoj-225-书本整理-逆向思维dp
- ipc 通讯之 ipcs、ipcrm摘录
- 根据号码取得联系人姓名
- linux查看各项参数
- 光流法_OpenCV_详解
- 线程的加锁和解锁,防止多个用户操作一个方法
- Spring3 jar包详解
- Java 学习基础第三章之数据类型和运算符
- iOS开发-数据储存Core Data (二)
- 2007word如何转PDF
- UVA 10375 Choose and divide(组合数学)