2010-10-14 27 views

Trả lời

34

Tôi không biết rằng bạn có thể khởi chạy gmail cụ thể. Các bạn đã thử này trong OnClickListener của bạn

Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("text/plain"); 
startActivity(emailIntent); 

Bạn có thể tìm thêm chi tiết ở đây: Email android intent

+0

Không, tôi đã không cố gắng này được nêu ra. Nhưng tôi chắc chắn sẽ. Cảm ơn vì đã giúp Jeff. – Aakash

+0

văn bản/tác phẩm đơn giản – Aakash

+0

cảm ơn liên kết cũng –

41

Như JeffC chỉ ra, nó rất dễ dàng để cơ bản sẽ cho Android mà bạn muốn gửi một cái gì đó email giống như và có Android cung cấp cho người dùng một danh sách các lựa chọn, có thể sẽ bao gồm Gmail. Nếu bạn muốn GMail cụ thể, bạn phải khéo léo hơn một chút. (Lưu ý rằng kiểu MIME chính xác thực sự là "text/plain", không phải là "plain/text". Thực hiện một phép lạ, GMail có vẻ là hoạt động duy nhất phản hồi lại, nhưng đây không phải là hành vi mà tôi Số lượng trên.)

Ứng dụng sau đây thể hiện nguyên tắc bạn có thể làm theo: thực sự kiểm tra tất cả các hoạt động cho biết họ có thể xử lý mục đích GỬI của bạn và xem có bất kỳ mục nào giống như GMail hay không.

package com.stackoverflow.beekeeper; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.content.pm.ResolveInfo; 
import android.os.Bundle; 

import java.util.List; 

public class StackOverflowTest extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
     intent.setType("text/plain"); 
     final PackageManager pm = getPackageManager(); 
     final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0); 
     ResolveInfo best = null; 
     for (final ResolveInfo info : matches) 
      if (info.activityInfo.packageName.endsWith(".gm") || 
     info.activityInfo.name.toLowerCase().contains("gmail")) best = info; 
     if (best != null) 
      intent.setClassName(best.activityInfo.packageName, best.activityInfo.name); 
     startActivity(intent); 
    } 
} 
+0

Cảm ơn các thông tin và mã beekeeper. Cho rằng vấn đề mở bất kỳ chương trình thư khác và để cho người dùng chọn là hoàn toàn tốt. Nó không phải là gmail. Chỉ có chương trình đó mới có thể gửi một email mà tôi nghĩ là được hoàn thành bởi Intent intent = new Intent (android.content.Intent.ACTION_SEND); – Aakash

+0

Cách mở thư Yahoo Có lập trình giống Gmail? –

+0

Có lẽ câu trả lời này sẽ giúp bạn: http://stackoverflow.com/questions/9516334/how-to-open-gmail-yahoo-mail-and-rediff-mails-in-application-programmatically – anivaler

31
try{  
    Intent intent = new Intent (Intent.ACTION_VIEW , Uri.parse("mailto:" + "your_email")); 
    intent.putExtra(Intent.EXTRA_SUBJECT, "your_subject"); 
    intent.putExtra(Intent.EXTRA_TEXT, "your_text"); 
    startActivity(intent); 
}catch(ActivityNotFoundException e){ 
    //TODO smth 
} 
+0

Đây là câu trả lời duy nhất phù hợp với tôi. – Jacolack

+1

Hữu ích, hãy bọc nó bằng ActivityNotFoundException. – Rahul

+1

@Rasi Cảm ơn bạn. Tôi đã thêm try-catch vào câu trả lời. – anivaler

0

nếu bạn không nhận được bất cứ điều gì trong dòng này

final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0);

sau đó thay thế dòng này với

final List<ResolveInfo> matches = pm.queryIntentActivities(intent, 1);

1

Mã này sẽ trực tiếp bắt đầu gmail ứng dụng để gửi email.

tôi phát hiện ra sử dụng this post rằng phần quan trọng ở đây là để tìm "tên gói" và "activityInfo.name"

tôi muốn chỉ sử dụng gmail mà không có một tính năng chọn. Lưu ý rằng tên gói được mã hóa cứng vì vậy nếu Gmail thay đổi tên gói của nó, nó sẽ không hoạt động nữa.

Chìa khóa cho điều này là setComponent trong đó thông số đầu tiên là tên gói và tham số thứ hai là tên activityInfo.

Nhưng như tôi đã nói một cách thận trọng, tôi tự nhắc lại; nếu người dùng không cài đặt ứng dụng gmail hoặc gmail thay đổi tên gói hoặc tên Activty để gửi email, mã (cứng) này sẽ bị hỏng. Thy đã được cảnh báo;)

Đây là mã của tôi

Intent myIntent = new Intent(Intent.ACTION_SEND); 

PackageManager pm = getPackageManager(); 
Intent tempIntent = new Intent(Intent.ACTION_SEND); 
tempIntent.setType("*/*"); 
List<ResolveInfo> resInfo = pm.queryIntentActivities(tempIntent, 0); 
for (int i = 0; i < resInfo.size(); i++) { 
    ResolveInfo ri = resInfo.get(i); 
    if (ri.activityInfo.packageName.contains("android.gm")) { 
     myIntent.setComponent(new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name)); 
     myIntent.setAction(Intent.ACTION_SEND); 
     myIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
     myIntent.setType("message/rfc822"); 
     myIntent.putExtra(Intent.EXTRA_TEXT, "extra text"); 
     myIntent.putExtra(Intent.EXTRA_SUBJECT, "Extra subject"); 
     myIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("uri://your/uri/string"); 
    } 
} 
startActivity(myIntent); 
2
public static void openGmail(Activity activity,String[] email, String subject, String content) { 
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.putExtra(Intent.EXTRA_EMAIL, email); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    emailIntent.setType("text/plain"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content); 
    final PackageManager pm = activity.getPackageManager(); 
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0); 
    ResolveInfo best = null; 
    for(final ResolveInfo info : matches) 
     if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) 
      best = info; 
    if (best != null) 
     emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name); 

    activity.startActivity(emailIntent); 
} 
+0

Ứng dụng này sẽ mở ứng dụng gmail, nhưng ngay sau khi email được gửi, nó không chuyển đến người nhận –

2
<TextView 
android:id="@+id/EmailId" 
android:linksClickable="true" 
android:autoLink="email" 
android:text="[email protected]" 
/> 

Đây là phương pháp tốt nhất để gửi email trên nhấp chuột của TextView.

0
Intent intent = new Intent(Intent.ACTION_SEND).setType("text/plain") 
         .putExtra(Intent.EXTRA_EMAIL, new String[]{emails}); 
       List<ResolveInfo> matches = activity.getPackageManager().queryIntentActivities(intent, 0); 
       ResolveInfo best = null; 
       for (ResolveInfo info : matches) { 
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail")) { 
         best = info; 
        } 
       } 
       if (best != null) { 
        intent.setClassName(best.activityInfo.packageName,best.activityInfo.name); 
       } 
       activity.startActivity(intent); 
+0

Vui lòng thêm một số thông tin bổ sung về lý do tại sao nó hoạt động – plaidDK

+0

@ plaidDK, trong Danh sách , chúng tôi đang nhận tất cả các gói ứng dụng đã cài đặt trên thiết bị. sau đó, kiểm tra các gói gmail bằng cách đặt điều kiện trong vòng lặp. nếu Danh sách chứa gói gmail, sau đó bởi intent.setClassName() đặt gói gmail, nó sẽ trực tiếp mở ứng dụng gmail, nếu không nó sẽ mở ra nhiều mục đích tùy chọn .. –

1

Bạn chỉ cần đặt bên dưới mã bên trong sự kiện nhấp chuột của mình. Sẽ mở trực tiếp gmail dưới dạng chế độ soạn thư, ảnh chụp màn hình đầu ra được đính kèm bên dưới.

Chúc mừng mã hóa :-)

mã:

Intent intent=new Intent(Intent.ACTION_SEND); 
String[] recipients={"[email protected]"}; 
intent.putExtra(Intent.EXTRA_EMAIL, recipients); 
intent.putExtra(Intent.EXTRA_SUBJECT,"Subject text here..."); 
intent.putExtra(Intent.EXTRA_TEXT,"Body of the content here..."); 
intent.putExtra(Intent.EXTRA_CC,"[email protected]"); 
intent.setType("text/html"); 
intent.setPackage("com.google.android.gm"); 
startActivity(Intent.createChooser(intent, "Send mail")); 

Output:

enter image description here

Các vấn đề liên quan