设备的电话号码返回0

时间:2014-11-13 16:11:13

标签: java android contacts android-contacts

我对Android开发有点新手,我现在完全陷入困境! 所以我希望你会帮助我!

所以 - 我试图通过联系人选择器中的联系人获取电话号码和电子邮件地址。 但是当我显示输出时,它表示它为0并且为空。 我究竟做错了什么? 这是代码!

if (view == btnPhonebook2) {
        Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);
    }

  public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);
    switch (reqCode) {
    case (PICK_CONTACT):
        if (resultCode == Activity.RESULT_OK) {
            // String id = null;
            // FIRST TRY

              Uri contactData = data.getData(); Cursor c = managedQuery(contactData, null, null, null, null); 
              if(c.moveToFirst()) { 
                  String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
                  int number = c.getInt(c.getColumnIndexOrThrow(People.PRIMARY_PHONE_ID));
                  String email = c.getString(c.getColumnIndexOrThrow(People.PRIMARY_EMAIL_ID));


              //+" : c.getInt(c.getColumnIndexOrThrow(People.NUMBER));
              Toast.makeText(getApplicationContext(),"you selected : "+name+"\n With the telephone number :"+number+"\n And the email :"+email,Toast.LENGTH_LONG).show();

              DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which){
                        case DialogInterface.BUTTON_POSITIVE:
                            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "60158096"));
                              startActivity(intent);
                            break;

                        case DialogInterface.BUTTON_NEGATIVE:
                            Intent email = new Intent(Intent.ACTION_SEND);
                              email.putExtra(Intent.EXTRA_EMAIL, new String[]{"emailExample@gmail.com"});          
                              email.putExtra(Intent.EXTRA_SUBJECT, "subject");
                              email.putExtra(Intent.EXTRA_TEXT, "message");
                              email.setType("message/rfc822");
                              startActivity(Intent.createChooser(email, "Choose an Email client :"));
                            break;
                        }
                    }
                };

                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("How will you contact: "+name).setPositiveButton("Call", dialogClickListener)
                    .setNegativeButton("Email", dialogClickListener).show();

当我显示字符串名称时 - 它很好!?

1 个答案:

答案 0 :(得分:1)

我在here之前回复了类似内容。

ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
String phone = null;
if (cur.getCount() > 0) { 
  while (cur.moveToNext()) { 
    String id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); 
    if (Integer .parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
    { 
      Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); 
      while (pCur.moveToNext()) { 
        phone = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        // This was the phone number for that contact id...
      } 
    pCur.close(); 
    Cursor emailCur = cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { id }, null);
    while (emailCur.moveToNext()) { 
    // For Email
      emailContact = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
      emailType = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
    } 
  } 
}

同样,您可以获得image uri
您的代码存在问题:

String name = c.getString(c.getColumnIndexOrThrow(People.NAME)); 
int number = c.getInt(c.getColumnIndexOrThrow(People.PRIMARY_PHONE_ID));
String email = c.getString(c.getColumnIndexOrThrow(People.PRIMARY_EMAIL_ID));

使用String类型而不是int和Contacts.People class is deprecated from api 5。此外,People.PRIMARY_PHONE_ID将为您提供ID而不是PhoneNumber。

String id = c.getString(c.getColumnIndex(People.PRIMARY_PHONE_ID));