Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法获取本地电话联系人姓名、手机号码和电子邮件地址_Android_Contact - Fatal编程技术网

Android 无法获取本地电话联系人姓名、手机号码和电子邮件地址

Android 无法获取本地电话联系人姓名、手机号码和电子邮件地址,android,contact,Android,Contact,在我的应用程序中,我想获取并列出联系人姓名、电话号码以及我尝试过的电子邮件地址,但Contacts contract.commondatatypes.Email和Contacts contract.Contacts.DISPLAY\u name冲突,因此如果可能无法获取,请提供一些我尝试过的代码 ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CO

在我的应用程序中,我想获取并列出联系人姓名、电话号码以及我尝试过的电子邮件地址,但
Contacts contract.commondatatypes.Email
Contacts contract.Contacts.DISPLAY\u name
冲突,因此如果可能无法获取,请提供一些我尝试过的代码

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            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()) {
                     String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                     Toast.makeText(NativeContentProvider.this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show();
                 } 
            pCur.close();
        }
        }
    }
    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
    Cursor emailCur = cr.query(
            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            null,
            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
            new String[]{id}, null);
    while (emailCur.moveToNext()) {
        // This would allow you get several email addresses
            // if the email addresses were stored in an array
        String email = emailCur.getString(
                      emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
        String emailType = emailCur.getString(
                      emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

      System.out.println("Email " + email + " Email Type : " + emailType);
    }
    emailCur.close();

看起来代码的问题可能是您想要的内容应该在两个单独的查询中

查询电子邮件帐户或电话号码列表时使用的常量与ContactsContact.CommonDataTypes中的常量类似,URI:ContactsContact.CommonDataTypes.email.CONTENT\u URI

查询实际的联系人属性(不是像name这样的列表)将使用ContactsContract.Contacts中的常量,URI:基于Contacts.CONTENT\u URI返回的数据


信息并非全部存储在同一个位置,这可能就是可能存在冲突的原因。

您好,请参阅以下链接:
 switch (reqCode) {
        case (REQUEST_CODE_email):
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor c = getContentResolver().query(contactData, null, null, null, null);
                if (c.moveToFirst()) {
                    String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                    String hasNumber = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                    String num = "";
                    if (Integer.valueOf(hasNumber) == 1) {
                        Cursor numbers = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                        while (numbers.moveToNext()) {
                            num = numbers.getString(numbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
                            //Toast.makeText(getApplicationContext(), "Number=" + num, Toast.LENGTH_LONG).show();

                            //asdasdasdsa
                            if(getEmail(num).isEmpty()){
                                Toast.makeText(this, "Email Not Found In That Contact Try Another", Toast.LENGTH_SHORT).show();
                            }
                            else {
                                edt_email_contact.setText("" + getEmail(num));
                            }                            }
                    }
                }
                break;
            }
         case (REQUEST_CODE_number):
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor c = getContentResolver().query(contactData, null, null, null, null);
                if (c.moveToFirst()) {
                    String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                    String hasNumber = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                    String num = "";
                    if (Integer.valueOf(hasNumber) == 1) {
                        Cursor numbers = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                        while (numbers.moveToNext()) {
                            num = numbers.getString(numbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            //Toast.makeText(getApplicationContext(), "Number=" + num, Toast.LENGTH_LONG).show();



                            edt_email_contact.setText("" + num);
                        }
                    }
                }
                break;
            }

    }