суббота, 11 июня 2011 г.

Получение email из контактной книги Android

Строка такого вида чтоб получить список email не работает, хотя во многих статьях ее используют:

Intent intent=new Intent(Intent.ACTION_PICK);
intent.setData(ContactsContract.CommonDataKinds.Email.CONTENT_URI);
startActivityForResult(intent, some_number);

Видимо работала до версии < Android 2.0, так что пришлось чуть по шаманить, вариант получился не лучший так как мы не видим сам mail а видим только контакт.
Если у вас есть вариант как увидеть mail в контакт листе напишите в комментариях.
Код:
//Какой то обработчик нажатия
public boolean onLongClick(View arg0) {
Uri a = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

Intent i=new Intent(Intent.ACTION_PICK, a);
startActivityForResult(i, PICK_REQUEST_MAIL); }
...
//Получаем результат

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if ((requestCode == PICK_REQUEST_MAIL) && (resultCode == RESULT_OK)) {
ContentResolver cr = getContentResolver();
Cursor pCur_id = cr.query(data.getData(), null, null, null, null);
        String id = null;
if(pCur_id != null)
 while (pCur_id.moveToNext()) {
 id = pCur_id.getString(pCur_id.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
       }
pCur_id.close();
//Важная строка, по ID контакта находим наш MAIL в запросе.
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID+ "=" + id, null, null);

if(pCur != null)
 while (pCur.moveToNext()) {
String mail = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
//Тут заносим наш mail куда нам надо например в EditText
        mailEditText.setText(mail);
 }
         pCur.close();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }