2017-11-13 24 views
0

コンタクトピッカーを使用してコンタクトの電話番号を読み込もうとしています。 表示名は正常に機能しますが、電話番号は機能しません。 コード:私はどこにでも該当する答えを見つけることができなかったので特定の連絡先の電話番号をインポートするにはどうすればいいですか?

//calling Contact Picker 
public void CPick(View v){ 
     Intent intent=new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
     startActivityForResult(intent, PICK_CONTACT); 
    } 
    @Override 
//Contact Picker here: 
    protected void onActivityResult(int reqCode, int resultCode, Intent data){ 
     super.onActivityResult(reqCode,resultCode, data); 

     if (reqCode==PICK_CONTACT){ 
      if(resultCode==AppCompatActivity.RESULT_OK){ 
       Uri contatctData=data.getData(); 
       Cursor c=getContentResolver().query(contatctData,null,null,null,null); 
       if (c.moveToFirst()){ 
        //String name=c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
//Above line works Fine 

        String name=c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
//Above line gives error on runtime "invalid column" 
        Toast.makeText(this,"U have picked:"+name,Toast.LENGTH_SHORT).show(); 



       } 
      } 

     } 
    } 

Anyhelpは非常に理解されるであろう。

答えて

1

ユーザーが電話番号を選択できるようにしたい場合は、最良のオプションはPHONE-PICKERないCONTACT-PICKERを使用することです:

Intent intent = new Intent(Intent.ACTION_PICK, CommonDataKinds.Phone.CONTENT_URI); 
startActivityForResult(intent, PICK_PHONE); 

... 

protected void onActivityResult(int requestCode, int resultCode, Intent intent){ 
    if (requestCode == PICK_PHONE && resultCode == RESULT_OK){ 
     Uri phoneUri = intent.getData(); 
     Cursor cur = getContentResolver().query(phoneUri, new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }, null, null, null); 
     if (cur != null && cur.moveToFirst()){ 
      String name = cur.getString(0); 
      String number = cur.getString(1); 
      Log.d("PHONE-PICKER", "User picker: " + name + " - " + number); 
      cur.close(); 
     } 
    } 
} 
+0

PICK_PHONEとして知られているものはありません –

+0

チャームのように動作します。 Uは私の別の日を保存しました:) –

1

、この方法を試してみてください:

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

あなたはあなたのlogcatの連絡先番号が表示されます。

+0

私は選択した連絡先の電話番号を返しません。常にID == 1の連絡先を選択します。電話番号と同じです。 –

関連する問題