Android编程,根据姓名获得手机通讯录中的电话号码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android编程,根据姓名获得手机通讯录中的电话号码相关的知识,希望对你有一定的参考价值。

public class MainActivity extends ActionBarActivity

private EditText et;
//private Button btn;
private Toast mToast;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);

et = (EditText)this.findViewById(R.id.mobile);

public void getTelClick()
String name = et.getText().toString();
number(name);

//通过输入获取电话号码
public void number(String name)
String phoneNumber="";
//使用ContentResolver查找联系人数据
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//遍历查询结果,找到所需号码
while(cursor.moveToNext())
//获取联系人ID
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//获取联系人的名字
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if(name.contains(contactName))
//使用ContentResolver查找联系人的电话号码
Cursor phone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
null, null);
phoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
mToast.setText(phoneNumber);
mToast.show();
break;
//return phoneNumber;

break;

//return phoneNumber;


PS:一输入姓名,程序就崩了,权限也添加的。求大神指点!不胜感激!

import cn.teachcourse.R;

/**
 * Created by postmaster@teachcourse.cn on 2016/5/5.
 */
public class PhoneNameActivity extends ActionBarActivity 
    private static final String TAG = PhoneNameActivity.class.getSimpleName();
    private EditText et;

    public static void start(Context context) 
        start(context, null);
    

    public static void start(Context context, Intent extras) 
        Intent intent = new Intent();
        intent.setClass(context, PhoneNameActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        if (extras != null) 
            intent.putExtras(extras);
        
        context.startActivity(intent);
    

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_phone_name);
        et = (EditText) this.findViewById(R.id.mobile);
    

    public void getTelClick(View view) 
        String name = et.getText().toString().trim();
        number(name);
    

    /**
     * 通过输入获取电话号码
     */
    public void number(String name) 
        //使用ContentResolver查找联系人数据
        Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        //遍历查询结果,找到所需号码
        while (cursor.moveToNext()) 
            //获取联系人ID
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            //获取联系人的名字
            String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            if (name.equals(contactName)) 
                //使用ContentResolver查找联系人的电话号码
                Cursor phone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                if (phone.moveToNext()) 
                    String phoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    Toast.makeText(this, phoneNumber+"TeachCourse——blog。。。", Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "电话:" + phoneNumber);
                    break;
                

            
        
    

1、修改getTelClick()方法

2、修改Toast面包屑提示

3、修改获取联系人名字方法

4、位置稍微调整

追问

谢谢,非常感谢。

参考技术A 你在这个代码下面加一句
//使用ContentResolver查找联系人的电话号码
Cursor phone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);

phone.moveToNext(); //指向下一行
因为一开始是指向第一行的上一行,
直接phoneNumber = phone.getString(。。)会出错。
参考技术B 你的联系人的信息存放在数据库中?如果时这样的话,可以用cursor,然后查询数据库where=联系人姓名的那一行数据,这样,这个联系人的所有信息就都查到了,然后显示你需要的就可以了

Android获取手机联系人的姓名和电话

Android获取手机联系人的姓名和电话


主要是用到了跳入手机联系人的intent和获取手机联系人信息的内容提供者,直接上代码

注:此贴是借鉴别人的帖子加了一些自己的东西写出的,原帖地址明日附上:

/ 首先 我们需要跳入手机通讯录
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
 startActivityForResult(intent, 0);

// 之后,我们需要重写onActivityResult来解析从联系人返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 0: {

            if (resultCode == Activity.RESULT_OK) {

                Uri contactData = data.getData();
                // 这样就得到了一个装有联系人数据的游标
                Cursor c = managedQuery(contactData, null, null, null, null);
                // 将游标移动到第一个位置,然后我们开始解析游标中的数据,这里我们抽取了一个方法;
                c.moveToFirst();
                // getContactPhone(CUrsor cursor)
                String phoneNum[] = this.getContactPhone(c);
                // 最终 就得到了你想得到的东西,装在了phoneNum[] 中,想做什么操作就做什么操作就行了;
            }

            break;
        }
    }
}
/**
 * 参数: Cursor cursor; 指定游标
 * 功能: 从指定游标中取出联系人姓名和电话,并且返回
 * 返回值: String[] 0位置是联系人姓名 1位置是联系人电话
 */
private String[] getContactPhone(Cursor cursor) {

    int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
    int phoneNum = cursor.getInt(phoneColumn);
    // 最终要返回的String数组
    String phoneResult[] = new String[2];
    if (phoneNum > 0) {
        // 获得联系人的ID号
        int idColumn = curso0r.getColumnIndex(ContactsContract.Contacts._ID);
        String contactId = cursor.getString(idColumn);
        // 获得联系人的电话号码的cursor;
        Cursor phones = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
                null, null);
        if (phones.moveToFirst()) {
            // 遍历所有的电话号码
            for (; !phones.isAfterLast(); phones.moveToNext()) {
                int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                int phone_type = phones.getInt(typeindex);
                // 得到选定联系人的号码
                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                // 得到选定联系人的名字
                String phoneName = phones.getString(phones.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));

                // 这一块switch不清楚能过滤什么,明天回公司试试看,
                switch (phone_type) {
                    case 2:
                        phoneResult[1] = phoneNumber;
                        phoneResult[0] = phoneName;
                        break;
                }
            }
            // 最后 要关闭Cursor
            if (!phones.isClosed()) {
                phones.close();
            }
        }
    }
    return phoneResult;
}

复制以上代码,就可以做到了..

以上是关于Android编程,根据姓名获得手机通讯录中的电话号码的主要内容,如果未能解决你的问题,请参考以下文章

Android获取手机联系人的姓名和电话

android手机,新建联系人在通讯录无法显示。

android:获取手机号码和姓名实现通讯录

Android 手机联系人仅包含照片、电话和姓名

[PTA]7-34 通讯录的录入与显示

7-2 通讯录的录入与显示 (10 分)