Android联系人列表获取电话号码

Android联系人列表获取电话号码,android,contact,picker,Android,Contact,Picker,嗨,我正在我的应用程序中尝试此代码,我可以获取联系人列表,但当我按下联系人姓名时,我在我的编辑文本中没有得到任何我希望获得的联系人电话号码 对不起,我的英语很差 public void doLaunchContactPicker(View view) { Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);

嗨,我正在我的应用程序中尝试此代码,我可以获取联系人列表,但当我按下联系人姓名时,我在我的编辑文本中没有得到任何我希望获得的联系人电话号码 对不起,我的英语很差

         public void doLaunchContactPicker(View view) {
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                Contacts.CONTENT_URI);
        startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode=RESULT_OK) {
            case CONTACT_PICKER_RESULT:
                Cursor cursor = null;
                String phone = "";
                try {
                    Bundle extras = data.getExtras();
                    Set<String> keys = extras.keySet();
                    Iterator<String> iterate = keys.iterator();
                    while (iterate.hasNext()) {
                        String key = iterate.next();
                        Log.v(DEBUG_TAG, key + "[" + extras.get(key) + "]");
                    }

                    Uri result = data.getData();
                    Log.v(DEBUG_TAG, "Got a contact result: "
                            + result.toString());

                    // get the contact id from the Uri
                    String id = result.getLastPathSegment();


                    cursor = getContentResolver().query(Phone.CONTENT_URI,
                            null, Phone.CONTACT_ID + "=?", new String[] { id },
                            null);

                    int PhoneIdx = cursor.getColumnIndex(Phone.DATA);


                    if (cursor.moveToFirst()) {

                                                                        phone = cursor.getString(PhoneIdx);

                        Log.v(DEBUG_TAG, "Got number: " + phone);

                    } else {
                        Log.w(DEBUG_TAG, "No results");
                    }
                } catch (Exception e) {
                    Log.e(DEBUG_TAG, "Failed to Number", e);
                } finally {
                    if (cursor != null) {
                        cursor.close();
                    }
                    EditText ponenumber = (EditText) findViewById(R.id.ednum);
                    ponenumber.setText(phone);

                    if (phone.length() == 0) {
                        Toast.makeText(this, "No number found for contact.",
                                Toast.LENGTH_LONG).show();
                    }

                }

                break;
            }

        } else {
            Log.w(DEBUG_TAG, "Warning: activity result not ok");
        }
    }
public void doLaunchContactPicker(视图){
Intent contactPickerIntent=新的Intent(Intent.ACTION\u PICK,
联系人。内容(URI);
startActivityForResult(联系人选取器内容、联系人选取器结果);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(resultCode==RESULT\u OK){
开关(请求代码=结果\u正常){
案例联系人\u选取者\u结果:
游标=空;
字符串phone=“”;
试一试{
Bundle extras=data.getExtras();
Set keys=extras.keySet();
Iterator iterate=keys.Iterator();
while(iterate.hasNext()){
字符串键=iterate.next();
Log.v(DEBUG_标记,key++“[”+extras.get(key)+“]);
}
Uri结果=data.getData();
Log.v(DEBUG_标记,“获得联系结果:”
+result.toString());
//从Uri获取联系人id
字符串id=result.getLastPathSegment();
cursor=getContentResolver().query(Phone.CONTENT\u URI,
null,Phone.CONTACT_ID+“=?”,新字符串[]{ID},
无效);
int PhoneIdx=cursor.getColumnIndex(Phone.DATA);
if(cursor.moveToFirst()){
phone=cursor.getString(PhoneIdx);
Log.v(DEBUG_标签,“Got number:+phone”);
}否则{
Log.w(调试标签,“无结果”);
}
}捕获(例外e){
Log.e(调试标签“编号失败”,e);
}最后{
如果(光标!=null){
cursor.close();
}
EditText-Poneumber=(EditText)findViewById(R.id.ednum);
ponenumber.setText(电话);
if(phone.length()==0){
Toast.makeText(这是“找不到联系人号码”,
Toast.LENGTH_LONG).show();
}
}
打破
}
}否则{
w(调试标签,“警告:活动结果不正常”);
}
}

你真的很接近——有几件事

  • switch语句基于resultCode,而不是请求代码。将其更改为“开关(请求代码)”

  • Phone.DATA可以工作,但为了可读性,请改用Phone.NUMBER:)

  • 确保您在AndroidManifest.xml文件中设置了android.permission.READ_CONTACTS的权限,作为manifest元素中的元素,而不是应用程序元素中的元素。这条线应该是这样的


我对您的示例进行了这些修改,并得到了可用的代码。

您实际上非常接近-有几件事

  • switch语句基于resultCode,而不是请求代码。将其更改为“开关(请求代码)”

  • Phone.DATA可以工作,但为了可读性,请改用Phone.NUMBER:)

  • 确保您在AndroidManifest.xml文件中设置了android.permission.READ_CONTACTS的权限,作为manifest元素中的元素,而不是应用程序元素中的元素。这条线应该是这样的


我对您的示例进行了这些修改,并获得了工作代码。

您可以更改您想要获得电话号码的代码,如下所示


  List numberList = new ArrayList();
        Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI,contactId);
        Uri targetUri = Uri.withAppendedPath(baseUri,Contacts.Data.CONTENT_DIRECTORY);
        Cursor cursor = getContentResolver().query(targetUri,
                    new String[] {Phone.NUMBER},Data.MIMETYPE+"='"+Phone.CONTENT_ITEM_TYPE+"'",null, null);
        startManagingCursor(cursor);
        while(cursor.moveToNext()){
            numberList.add(cursor.getString(0));
        }
        cursor.close();

您可以更改您想要获取电话号码的代码,如下所示


  List numberList = new ArrayList();
        Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI,contactId);
        Uri targetUri = Uri.withAppendedPath(baseUri,Contacts.Data.CONTENT_DIRECTORY);
        Cursor cursor = getContentResolver().query(targetUri,
                    new String[] {Phone.NUMBER},Data.MIMETYPE+"='"+Phone.CONTENT_ITEM_TYPE+"'",null, null);
        startManagingCursor(cursor);
        while(cursor.moveToNext()){
            numberList.add(cursor.getString(0));
        }
        cursor.close();

这是一个老帖子,但它可以帮助别人

如果您只需要拿起一个联系人,您可以在不使用此部分的情况下使用帖子的第一个代码:

Bundle extras = data.getExtras();
Set<String> keys = extras.keySet();
Iterator<String> iterate = keys.iterator();
while (iterate.hasNext()) {
    String key = iterate.next();
    Log.v(DEBUG_TAG, key + "[" + extras.get(key) + "]");
}
Bundle extras=data.getExtras();
Set keys=extras.keySet();
Iterator iterate=keys.Iterator();
while(iterate.hasNext()){
字符串键=iterate.next();
Log.v(DEBUG_标记,key++“[”+extras.get(key)+“]);
}

这是一篇老文章,但它可以帮助别人

如果您只需要拿起一个联系人,您可以在不使用此部分的情况下使用帖子的第一个代码:

Bundle extras = data.getExtras();
Set<String> keys = extras.keySet();
Iterator<String> iterate = keys.iterator();
while (iterate.hasNext()) {
    String key = iterate.next();
    Log.v(DEBUG_TAG, key + "[" + extras.get(key) + "]");
}
Bundle extras=data.getExtras();
Set keys=extras.keySet();
Iterator iterate=keys.Iterator();
while(iterate.hasNext()){
字符串键=iterate.next();
Log.v(DEBUG_标记,key++“[”+extras.get(key)+“]);
}

Thx Alexander我改为“switch(requestCode)”,将phone.Data改为phone.Number,我确信我有权限,但这不起作用,我可以获取联系人列表,但当我选择联系人时,什么都没有发生,所以请帮我,我不知道该怎么做,这对我来说真的很重要。您的日志输出中显示了什么?您使用什么设备进行测试?最小/目标SDK设置为什么?Thx Alexander i更改为“开关(请求代码)”还有phone.Data to phone.Number,我确信我有权限,但它不起作用,我可以获取联系人列表,但当我选择联系人时,什么都没有发生,所以请帮助我,我不知道该怎么做,这对我来说真的很重要,你的日志输出中显示了什么?您使用什么设备进行测试?min/target SDK设置为什么?到目前为止,这里的答案是最快的,但是需要注意的是,您需要执行自己的重复检查。到目前为止,这里的答案是最快的,但是需要注意的是,您需要执行自己的重复检查。