2013-04-08 46 views
0

我正在開發中,我想使用的聯繫人讀取聯繫人號碼下面的代碼如何閱讀的Android

Intent ContactPickerIntent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); 
      ContactPickerIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
      startActivityForResult(ContactPickerIntent, CONTACT_PICKER_RESULT); 

它工作正常,在模擬器,但不是在設備上使用Android短信應用的接觸。我應該做些什麼改變才能讓它在設備上運行。

這裏是我的onactivityresult功能

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) 
    { 
     switch (requestCode) 
     { 
     case CONTACT_PICKER_RESULT: 
      Cursor cursor=null; 
      try 
      { 
       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(); 

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

       cursor.moveToFirst(); 
       int phoneIdx = cursor.getColumnIndex(Phone.NUMBER); 
       if (cursor.moveToFirst()) 
       { 
        phonenofromcontact = cursor.getString(phoneIdx); 
        finallistofnumberstosendmsg +=","+phonenofromcontact; 
        Log.v(DEBUG_TAG, "Got phone no : " + phonenofromcontact); 
       } 
       else 
       {         
        Log.w(DEBUG_TAG, "No results"); 
       } 
      } 
      catch(Exception e) 
      { 
       Log.e(DEBUG_TAG, "Failed to get contact number", e); 
      } 
      finally 
      { 
       if (cursor != null) 
       { 
        cursor.close(); 
       } 
      } 
      phonePhoneno= (EditText)findViewById(R.id.phonenofromcontact); 
      phonePhoneno.setText(finallistofnumberstosendmsg); 
      //phonePhoneno.setText(phonenofromcontact); 
      if(phonenofromcontact.length()==0) 
      { 
       Toast.makeText(this, "No contact number found for this contact", 
         Toast.LENGTH_LONG).show(); 
      } 
      break; 
     } 
    } 
    else 
    { 
     Log.w(DEBUG_TAG, "Warning: activity result not ok"); 
    } 
} 
+0

以何種方式是不工作?它崩潰了嗎?或返回沒有聯繫人?請提供更多信息! – ccbunney 2013-04-08 18:33:03

+0

它沒有返回聯繫號碼。我是否應該提供關於activityresult函數的代碼以使其更清晰? – sid 2013-04-08 18:36:21

+0

你能否在這裏展示你的onActivityResult函數。 – ccbunney 2013-04-08 18:41:12

回答

2

你過濾使用你的意圖:

ContactPickerIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 

它告訴聯繫人提供程序只返回包含電話內容類型的聯繫人信息。

因此,通過聯繫人提供程序返回的ID是ContactsContract.Data_ID - 而不是CONTACT_ID

試着改變你的光標查詢到這一點:

// query for everything contact number 
cursor = getContentResolver().query( 
       Phone.CONTENT_URI, null, 
       Phone._ID + "=?", 
       new String[]{id}, null); 

應該返回您選定的聯繫人號碼。

順便說一句,如果你沒有叫ContactPickerIntent.setType的意圖您最初寫的數據查詢會工作(如果你已經做出了上述改變 - 那麼你仍然需要調用這個)

它可能在你的模擬器上運行得很好 - 我猜測你的模擬器上可能有一個聯繫人和一個電話號碼?數據表的CONTACT_ID_ID都可能都是1,這可能巧合地返回正確的行。

+0

無法使用相同的消息「找不到此聯繫人的聯繫號碼」,這意味着phonenofromcontact.length()== 0,因爲它在代碼中寫入。 – sid 2013-04-08 21:17:53

+1

你確定嗎?當我將你的代碼粘貼到一個Activity中時,該修復對我有效。你嘗試了什麼:將CONTACT_ID更改爲_ID或刪除setType?附:不要這樣做! – ccbunney 2013-04-08 21:27:43

+0

謝謝你,它正在工作。 – sid 2013-04-09 15:49:19

0

你需要允許android.permission.READ_CONTACTS添加到您的AndroidManifest.xml。

+0

我已經獲得該許可。正如我所提到的,它正在模擬器上工作。 – sid 2013-04-08 18:38:56

0

需要在Android清單文件的權限:

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

這是我的工作代碼:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/")); 
startActivity(intent); 
+0

他擁有該權限,因爲它在模擬器上工作。 – ccbunney 2013-04-08 18:40:17

+0

@kaidul伊斯蘭教sazal它正在工作,但我們的要求是不同的..我想閱讀聯繫電話號碼,並添加到我的應用程序編輯文本。 – sid 2013-04-08 19:15:26

0

只要改變

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

// query for everything contact number 
       cursor = getContentResolver().query( 
         Phone.CONTENT_URI, null, 
         Phone._ID + "=?", 
         new String[]{id}, null);