Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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_Email_Contacts - Fatal编程技术网

Android 访问联系人并获取电子邮件地址

Android 访问联系人并获取电子邮件地址,android,email,contacts,Android,Email,Contacts,我有一个用于访问联系人的代码段。当用户单击按钮时,联系人列表将打开,用户可以从联系人中选择一个人,该人的电子邮件地址应写在编辑文本上。我可以从用户选择的人那里接收电子邮件。但我无法将其设置为编辑文本 static String email = ""; imgbtnaddfromcontacts.setOnClickListener(new OnClickListener() { @Override public void onClick(Vie

我有一个用于访问联系人的代码段。当用户单击按钮时,联系人列表将打开,用户可以从联系人中选择一个人,该人的电子邮件地址应写在编辑文本上。我可以从用户选择的人那里接收电子邮件。但我无法将其设置为编辑文本

static String email = "";


imgbtnaddfromcontacts.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v == imgbtnaddfromcontacts) {
                    try 
                    {
                        Intent intent = new Intent(Intent.ACTION_PICK,
                                ContactsContract.Contacts.CONTENT_URI);
                        startActivityForResult(intent, 1);

                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("Error in intent : ", e.toString());
                    }
                }
            }
        });
        kimeTxt.setText(email);
    }

    @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data) {
        super.onActivityResult(reqCode, resultCode, data);

        try {
            if (resultCode == Activity.RESULT_OK) {
                // Get data
                Uri contactData = data.getData();
                // Cursor
                Cursor cur = managedQuery(contactData, null, null, null, null);
                ContentResolver contect_resolver = getContentResolver();

                // List
                if (cur.moveToFirst()) {
                    String id = cur
                            .getString(cur
                                    .getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                    Cursor phoneCur = contect_resolver.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = ?", new String[] { id }, null);

                    Cursor emailCur = contect_resolver.query(
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                    + " = ?", new String[] { id }, null);

                    if (phoneCur.moveToFirst()) {
                        name = phoneCur
                                .getString(phoneCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        no = phoneCur
                                .getString(phoneCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    }

                    while (emailCur.moveToNext()) {
                        // This would allow you get several email addresses
                        // if the email addresses were stored in an array
                        email = emailCur
                                .getString(emailCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

                        if (email != null) 
                        {
                            seciliEmail = email;
                        } else {
                            Toast.makeText(EpostaIletActivity.this,
                                    "Kişinin eposta hesabı bulunmamaktadır.",
                                    Toast.LENGTH_SHORT);
                            Log.w("Error: ", "Kişinin eposta hesabı yok.");
                        }
                    }

                    Log.e("Phone no & name & email :***: ", name + " : " + no + ":" + email);
                    // txt.append(name + " : " + no + "\n");

                    id = null;
                    name = null;
                    no = null;
                    seciliEmail = "xxx";
                    phoneCur = null;
                    emailCur.close();
                }
                contect_resolver = null;
                cur = null;
                // populateContacts();

            }
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            Log.e("IllegalArgumentException :: ", e.toString());
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("Error :: ", e.toString());
        }
    }

我使用以下代码从所选联系人获取电子邮件地址-

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

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if (resultCode == RESULT_OK) {
        switch (requestCode) 
        {
        case CONTACT_PICKER_RESULT:
            Cursor cursor = null;
            String email = "", name = "";
            try {
                Uri result = data.getData();
                Log.v(DEBUG_TAG, "Got a contact result: " + result.toString());

                // get the contact id from the Uri
                String id = result.getLastPathSegment();

                // query for everything email
                cursor = getContentResolver().query(Email.CONTENT_URI,  null, Email.CONTACT_ID + "=?", new String[] { id }, null);

                int nameId = cursor.getColumnIndex(Contacts.DISPLAY_NAME);

                int emailIdx = cursor.getColumnIndex(Email.DATA);

                // let's just get the first email
                if (cursor.moveToFirst()) {
                    email = cursor.getString(emailIdx);
                    name = cursor.getString(nameId);
                    Log.v(DEBUG_TAG, "Got email: " + email);
                } else {
                    Log.w(DEBUG_TAG, "No results");
                }
            } catch (Exception e) {
                Log.e(DEBUG_TAG, "Failed to get email data", e);
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
                EditText emailEntry = (EditText) findViewById(R.id.editTextv);
                EditText personEntry = (EditText) findViewById(R.id.person);
                emailEntry.setText(email);
                personEntry.setText(name);
                if (email.length() == 0 && name.length() == 0) 
                {
                    Toast.makeText(this, "No Email for Selected Contact",Toast.LENGTH_LONG).show();
                }
            }
            break;
        }

    } else {
        Log.w(DEBUG_TAG, "Warning: activity result not ok");
    }
}

doLaunchContactPicker
只需点击一次
按钮
即可随时随地使用该代码。

确保您的应用程序已获得权限,否则会出现奇怪的异常

You can achieve it like this     

   public class Abc extends Activity{
        EditText kimeTxt;
            Intent i;                                  
              Bundle b ;    
            @Override  

            protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.add_course);
        kimeTxt= (EditText)findViewById(R.id.emailid);

        }


        @Override
            public void onActivityResult(int reqCode, int resultCode, Intent data) {
                super.onActivityResult(reqCode, resultCode, data);

                try {
                    if (resultCode == Activity.RESULT_OK) {
                        // Get data
                        Uri contactData = data.getData();
                        // Cursor
                        Cursor cur = managedQuery(contactData, null, null, null, null);
                        ContentResolver contect_resolver = getContentResolver();

                        // List
                        if (cur.moveToFirst()) {
                            String id = cur
                                    .getString(cur
                                            .getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                            Cursor phoneCur = contect_resolver.query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                            + " = ?", new String[] { id }, null);

                            Cursor emailCur = contect_resolver.query(
                                    ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                            + " = ?", new String[] { id }, null);

                            if (phoneCur.moveToFirst()) {
                                name = phoneCur
                                        .getString(phoneCur
                                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                                no = phoneCur
                                        .getString(phoneCur
                                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                            }

                            while (emailCur.moveToNext()) {
                                // This would allow you get several email addresses
                                // if the email addresses were stored in an array
                                email = emailCur
                                        .getString(emailCur
                                                .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

                                if (email != null) 
                                {
                                    seciliEmail = email;
                                } else {
                                    Toast.makeText(EpostaIletActivity.this,
                                            "Kişinin eposta hesabı bulunmamaktadır.",
                                            Toast.LENGTH_SHORT);
                                    Log.w("Error: ", "Kişinin eposta hesabı yok.");
                                }
                            }

                            Log.e("Phone no & name & email :***: ", name + " : " + no + ":" + email);
                            // txt.append(name + " : " + no + "\n");

                            id = null;
                            name = null;
                            no = null;
                            seciliEmail = "xxx";
                            phoneCur = null;
                            emailCur.close();
                        }


    // can set email id here 



      kimeTxt.setText(email);


                        contect_resolver = null;
                        cur = null;
                        // populateContacts();

                    }
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                    Log.e("IllegalArgumentException :: ", e.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("Error :: ", e.toString());
                }
        }
在AndroidManifest.xml中:

<uses-permission android:name="android.permission.READ_CONTACTS" />


我确信这是一个很好的答案。触点在API 8级中进行了去润滑。API 17中的ActivityNotFoundException.我的工作非常出色。。如果我选择拥有电子邮件地址的联系人,否则请联系应用程序挂断,黑色尖叫,什么也没发生。我用的是HTC棒棒糖