2011-02-22 130 views
1

你好我想这个代码在我的应用我能得到联系人列表,但是当我按下联系人姓名我没有得到我的EditText任何事情,我期望能获得联系人电话号码 对不起关于我可怜的英语Android的联系人列表获取电话号码

  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"); 
     } 
    } 

回答

4

你其实很亲密 - 有几件事。

  • 您的switch语句基于resultCode而不是请求代码。更改但─它应该阅读“开关(requestCode)”

  • Phone.DATA的工作,但使用Phone.NUMBER而不是为可读性起见:)

  • 确保您有android.permission的权限。 READ_CONTACTS在AndroidManifest.xml文件设置,如清单元素中的元素,但不是在应用元素。该行应该看起来像这样。

    <uses-permission android:name="android.permission.READ_CONTACTS" />

我做这些修改到你的样品,并得到了工作的代码。

+0

THX亚历山大一世更改为“开关(requestCode)”和phone.Data到Phone.Number我相信,我有权限,但它没有工作,我可以得到联系人列表,但是当我接触chosse什么也没发生,所以请帮助我,我不知道该怎么做,它真的对我 – user620451 2011-02-23 00:01:30

+0

重要的是什么露面在你的日志输出中?你使用的是什么设备来测试?什么是最小/目标SDK设置为? – 2011-02-23 18:45:36

0

你可以改变你想要得到的电话号码,你的代码,如下


    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(); 
6
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 

while (phones.moveToNext()) 
{ 
    String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME) 
    String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

} 
+0

迄今为止最快的答案就在这里,然而,应该指出的是,一个需要自己进行重复检查。 – 2014-01-07 02:34:21

0

这是一个老的文章,但它可以帮助别人。

如果你只需要接机的联系人,你可以使用后的第一个代码,而这部分:

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) + "]"); 
} 
相关问题