2016-05-07 6 views
1

API 23の権限を持つ連絡先から電話番号を取得しようとしていますが、電話番号は常に空の文字列を返します。連絡先を取得する権限が確認され、連絡先は有効と表示されますが、連絡先の電話フィールドは存在しないようです。 "cr.query ..."は "while(phones.moveToNext)"が真に表示されないため何も返さないように見えます。 以下のコードを使用して電話番号を取得しています。連絡先に電話番号が表示されない理由は何ですか?Phone.NUMBERはすべての連絡先に対して空を返します

   ContentResolver cr = getContentResolver(); 
       cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
       if (cursor.moveToFirst()) { 
        String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); 
        while (phones.moveToNext()) { 
         String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         int type = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 
         switch (type) { 
          case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: 
           // do something with the Home number here... 
           break; 
          case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE: 
           PhoneNumber = number; 
           break; 
          case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: 
           // do something with the Work number here... 
           break; 
         } 
        } 
        phones.close(); 
       } 
       cursor.close(); 

UPDATE: わからない、なぜその方法は、作業が、作業を行う別の方法を見つかりませんでした。

 Uri result = data.getData(); 
     String id = result.getLastPathSegment(); 
     cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null); 
    int phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA); 

     if (cursor.moveToFirst()) { 
        PhoneNumber = cursor.getString(phoneIdx).toString(); 
       } 

この方法は問題ありません。

+0

ログ・猫のエラー – AndroidHacker

+0

とあなたの完全なコードを書くことができますエラー、ちょうど空の携帯電話の文字列がありませんでした。上記の投稿を編集して、動作する方法を示しました。テストされた携帯電話はNexus 6Pで、違いがある場合に備えています。 – user2431174

答えて

0

あなたは電話番号がContactContractを使用して詳細情報を取得するには、次のメソッドを使用しようとすることができます:

private void retrieveContactNumber() { 

    String contactNumber = null; 

    // getting contacts ID 
    Cursor cursorID = getContentResolver().query(uriContact, 
      new String[]{ContactsContract.Contacts._ID}, 
      null, null, null); 

    if (cursorID.moveToFirst()) { 

     contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); 
    } 

    cursorID.close(); 

    Log.d(TAG, "Contact ID: " + contactID); 

    // Using the contact ID now we will get contact phone number 
    Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 

      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + 
        ContactsContract.CommonDataKinds.Phone.TYPE + " = " + 
        ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 

      new String[]{contactID}, 
      null); 

    if (cursorPhone.moveToFirst()) { 
     contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
    } 

    cursorPhone.close(); 

    Log.d(TAG, "Contact Phone Number: " + contactNumber); 
} 
関連する問題