2013-10-26 103 views
1

我有textview。點擊它打開本地聯繫人列表。一旦用戶選擇了一個聯繫人,我應該在我的應用程序中顯示該號碼。我可以顯示姓名但不能顯示號碼。請幫忙。Android: - 選擇聯繫人並致電至選定號碼

在此先感謝。

這是我的代碼,但選擇的接觸我的應用程序崩潰後的。「不幸的是‘APP_NAME’已停止」

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


    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
    if (data != null) { 
     Uri uri = data.getData(); 

     if (uri != null) { 
      Cursor c = null; 
      try { 
       c = getContentResolver().query(uri, new String[]{ 
          ContactsContract.CommonDataKinds.Phone.NUMBER, 
          ContactsContract.CommonDataKinds.Phone.TYPE }, 
         null, null, null); 

       if (c != null && c.moveToFirst()) { 
        String number = c.getString(0); 
        int type = c.getInt(1); 
        showSelectedNumber(type, number); 
       } 
      } finally { 
       if (c != null) { 
        c.close(); 
       } 
      } 
     } 
    } 
} 

public void showSelectedNumber(int type, String number) { 
    Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();  
} 
} 
+1

哪裏是你的崩潰?聯繫人選擇的代碼在哪裏? – GrIsHu

回答

3

試試這個在您的onActivity結果。它會工作。

ContentResolver cr = getContentResolver(); 
    cursor = cr.query(intent.getData(), null, null, null, null); 

    while (cursor.moveToNext()) { 
     String contactId = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Contacts._ID)); 
     if (Integer 
       .parseInt(cursor.getString(cursor 
         .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor phones = getContentResolver().query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
          + " = " + contactId, null, null); 
      while (phones.moveToNext()) { 
       phoneNumber = phones 
         .getString(phones 
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      } 
      phones.close(); 
     } else { 
      snipp.showAlertDialog(getApplicationContext(), "No Number", 
        "Cannot read number", false); 
     } 

    } 
    cursor.close(); 
+2

非常感謝...終於完成了工作 – Praveen

0

如下試着在你的onActivityResult

ContentResolver cr = getContentResolver(); 

Uri contactData = data.getData(); 
Log.v("Contact", contactData.toString()); 
Cursor c = managedQuery(contactData,null,null,null,null); 

if(c.moveToFirst()){ 
     id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 
    Log.v("Contact", "ID: " + id.toString()); 
     name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    Log.v("Contact", "Name: " + name.toString()); 

    if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor pCur = cr.query(Phone.CONTENT_URI,null,Phone.CONTACT_ID +" = ?", new String[]{id}, null); 

     while(pCur.moveToNext()){ 
      phone = pCur.getString(pCur .getColumnIndex(Phone.NUMBER)); 
      Log.v("getting phone number", "Phone Number: " + phone); 
     } 
    } 

} 
0

在你的TextView OnclickListner

Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI); 
startActivityForResult(intent, PICK_CONTACT); 

試試這個

將這個代碼在把這個代碼

活動結果
@Override 
    public void onActivityResult(int reqCode, int resultCode, Intent data) { 
      super.onActivityResult(reqCode, resultCode, data); 
      switch (reqCode) { 
        case (PICK_CONTACT): 
          if (resultCode == Activity.RESULT_OK) { 
            Uri contactData = data.getData(); 
            Cursor c = managedQuery(contactData, null, null, null, null); 
            if (c.moveToFirst()) { 
              String name = c.getString(c.getColumnIndexOrThrow(People.NAME))+" : "+c.getInt(c.getColumnIndexOrThrow(People.NUMBER)); 
              // 
              txtContacts1.setText(name); 
            } 
          } 
          break; 
      } 

對於DAIL沒有把這個代碼

Intent intent = new Intent(Intent.ACTION_CALL); 
intent.setData(Uri.parse("tel:" + c.getInt(c.getColumnIndexOrThrow(People.NUMBER))); 
context.startActivity(intent); 
+0

managedQuery已棄用... – Praveen

相關問題