2011-05-02 57 views
8

我想去撿從聯繫人列表中的電子郵件。 挑選聯繫人不夠好,因爲聯繫人可能有多封電子郵件。的Android挑電子郵件意圖

使用API​​的演示,我設法選擇一個聯繫人,電話號碼,甚至一個地址。例如:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); 
// OR 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
// OR 
intent.setType(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE); 

,但試圖挑選電子郵件

intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE); 

當我沒有發現活動異常。

關於如何從所有聯繫人的電子郵件時選擇一個電子郵件的任何想法?

謝謝。 Alik。

更新(2011/05/02): 找到另一種方法從聯繫人中挑選事物,但電子郵件選擇器仍未註冊到意圖。

工作:

new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); 
new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI); 

不工作:

new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Email.CONTENT_URI); 
+1

你找到一個解決的辦法?建立一個自定義對話框,就像答案所暗示的那樣,是一個非常難看的解決方案 – Thrakbad 2013-06-24 09:08:56

回答

1

我沒有具體試過用一個選擇器,但我們遍歷我們接觸的緩存並找到所有的聯繫方式與MIME類型Email.CONTENT_ITEM_TYPE

然後我們建立了一個對話框,將讓用戶挑選自己想要使用的E-mail地址,我們傳遞的e-mail地址到用戶的電子郵件應用程序,例如

final Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.putExtra(Intent.EXTRA_STREAM, "Some text"); 

    Builder builder = new Builder(this); 
    builder.setTitle("Choose email"); 
    builder.setItems(emailAddressesArray, new DialogInterface.OnClickListener() 
    { 
    @Override 
    public void onClick(DialogInterface dialog, int which) 
    { 
     String address = emailAddresses.get(emailAddressesArray[which]); 
     sLog.user("User selected e-mail: " + address); 
     emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{address}); 
     startExternalActivity(emailIntent); 
    } 
    }); 
    builder.show(); 
0

這裏的代碼樣本位在聯繫人列表中的用戶顯示的所有電子郵件地址,並允許他們選擇一個一個(然後放入EditTextR.id.的ID youredittextid)。

注:這是要做到這一點相當低效的方式,並會造成相當大的延遲,如果你有很多接觸。但是所有必要的代碼都在這裏;定製你認爲合適的...

 // We're going to make up an array of email addresses 
     final ArrayList<HashMap<String, String>> addresses = new ArrayList<HashMap<String, String>>(); 

     // Step through every contact 
     final ContentResolver cr = getContentResolver(); 
     final Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
     while (cursor.moveToNext()) 
     { 
      final String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      final String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

      // Pull out every email address for this particular contact 
      final Cursor emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
              ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 
      while (emails.moveToNext()) 
      { 
       // Add email address to our array 
       final String strEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

       final HashMap<String, String> email = new HashMap<String, String>(); 
       email.put("Name", contactName); 
       email.put("Email", strEmail); 

       addresses.add(email); 
      } 
      emails.close(); 
     } 

     // Make an adapter to display the list 
     SimpleAdapter adapter = new SimpleAdapter(this, addresses, android.R.layout.two_line_list_item, 
                new String[] { "Name", "Email" }, 
                new int[] { android.R.id.text1, android.R.id.text2 }); 

     // Show the list and let the user pick an email address 
     new AlertDialog.Builder(this) 
      .setTitle("Select Recipient") 
      .setAdapter(adapter, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 

       EditText e = (EditText)findViewById(R.id.youredittextid); 
       HashMap<String, String> email = addresses.get(which); 
       e.setText(email.get("Email")); 

       dialog.dismiss(); 
      } 
      }).create().show(); 
+0

作品如魅力,謝謝jeff – Archana 2012-03-16 11:15:43

1

,你必須使用以下常數(不CONTENT_ITEM_TYPE):

intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE); 
+0

這不適用於薑餅等低級別的api上 – Hades 2014-02-19 00:39:38

0

一個古老的線程,但...這些信息可能是有用的人。 當你開始Intent.ACTION_PICK的意圖您要調用「聯繫人選擇器」的活動,這通常是由聯繫人/通訊錄應用程序提供。

最新版本的vanilla(Google)通訊錄應用程序(Android 4.4.4)在其intent過濾器中確實擁有mimetype的Email.CONTENT_ITEM_TYPE,所以它應該對此類意圖作出響應,就像您做到的一樣。我不確定,但舊版本的聯繫人選取器(ICS,JB)似乎沒有在其意向過濾器中使用此選項。

總之,這個意圖應該KK工作安裝香草聯繫人,並且不應該對工作較舊的Android版本。

0

完美的工作:

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE); 
startActivityForResult(intent, 1); 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 1) { 
      if (resultCode == Activity.RESULT_OK) { 
       Uri contactData = data.getData(); 
       Cursor cursor = getActivity().managedQuery(contactData, null, null, null, null); 
       cursor.moveToFirst(); 
       String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       editText.setText(email); 
      } 


     } 
} 
+0

什麼設備上? – 2015-05-03 11:42:01

+0

我試過Nexus 5和MI3。 – Shubham 2015-05-04 06:05:31

+0

Android版本5? – 2015-05-04 06:10:52

相關問題