2015-03-02 12 views
10

Tôi muốn triển khai nút khi nhấn vào nó sẽ mở ứng dụng email khách mặc định bằng tệp đính kèm.Gửi email có tệp đính kèm theo chương trình trên Android

Tôi đang theo dõi this, nhưng tôi nhận được thông báo lỗi trên startActivity, nói rằng nó đang mong đợi một tham số hoạt động trong khi tôi đang cho nó một ý định. Tôi đang sử dụng API 21 và Android Studio 1.1.0, vì vậy có lẽ nó có liên quan đến nhận xét trong câu trả lời được cung cấp trong liên kết?

Đây là ngày thứ tư của tôi với tư cách là nhà phát triển Android vì vậy xin lỗi nếu tôi thiếu thứ gì đó thực sự cơ bản.

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

public void sendFileToEmail(File f){ 

    String subject = "Lap times"; 
    ArrayList<Uri> attachments = new ArrayList<Uri>(); 
    attachments.add(Uri.fromFile(f)); 
    Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
    intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments); 
    intent.setClassName("com.android.email", "com.android.mail.compose.ComposeActivity"); 

    try { 
     startActivity(intent); 
    } catch (ActivityNotFoundException e) { 
     e.printStackTrace(); 
    } 
+0

chấp nhận câu trả lời của tôi nếu nó được làm việc cho bạn. Để bạn có thể tránh câu hỏi này từ danh sách câu hỏi chưa được trả lời trong SOF –

Trả lời

17

Tôi nghĩ vấn đề của bạn là bạn đang không sử dụng các đường dẫn tập tin chính xác.

Các công trình sau đây cho tôi:

Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("text/plain"); 
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here"); 
emailIntent.putExtra(Intent.EXTRA_TEXT, "body text"); 
File root = Environment.getExternalStorageDirectory(); 
String pathToMyAttachedFile = "temp/attachement.xml"; 
File file = new File(root, pathToMyAttachedFile); 
if (!file.exists() || !file.canRead()) { 
return; 
} 
Uri uri = Uri.fromFile(file); 
emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 
startActivity(Intent.createChooser(emailIntent, "Pick an Email provider")); 

Bạn cũng cần phải cấp quyền cho người dùng thông qua một file manifest như dưới đây

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
+0

Tệp là tham số cho hàm nên tôi không thấy đây có thể là vấn đề. –

+0

Tệp chỉ là một tham số, nhưng bạn cần phải kiểm tra xem nó có khả dụng không. Và bạn cần cấp quyền đọc Bộ nhớ ngoài để đọc tệp. –

+1

Điều này đang hoạt động .. Cảm ơn rất nhiều .. :) – Kushal

2

Cố gắng sử dụng this.It đang làm việc ...

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
        emailIntent.setType("*/*"); 

        emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(listVideos.get(position).getVideoPath())));//path of video 
        startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

Cảm ơn

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