Tôi đang gửi email có tệp đính kèm bằng Trình tạo nội dung.Gửi email bằng email có đính kèm không phải lúc nào cũng hoạt động
- Thứ nhất, tôi ghi tệp vào thư mục bộ nhớ cache.
- Sau đó, tôi tạo email có chứa url cho mỗi tệp được cung cấp bởi nhà cung cấp nội dung
- Sau đó, tôi bắt đầu một hoạt động mới với mục đích ACTION_SEND_MULTIPLE.
- Tôi chọn gmail và sau đó nhấn nút gửi.
Điều này đôi khi hoạt động, có vẻ như hoạt động lần đầu tiên trong một thời gian, nhưng không hoạt động sau lần thử tiếp theo ... nhưng không phải lúc nào cũng như vậy.
Khi không hoạt động, email bị kẹt khi gửi trong gmail. Điều này xảy ra trên 2.3.3 và 4.0.1, mở thư trong ứng dụng khách gmail và nhấn nút gửi để thường xuyên làm cho thư được gửi gần như ngay lập tức, nhưng không phải mọi lần.
Mở Mục đích bằng Google Drive có hành vi tương tự như gmail.
Mở Mục đích bằng ứng dụng khách thư trao đổi được tích hợp sẵn luôn hoạt động cho đến nay.
Đây là đoạn mã để gửi email:
Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendIntent.putExtra(Intent.EXTRA_EMAIL, exportParams.emailAddresses);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Leader Activity Report");
sendIntent.putExtra(Intent.EXTRA_TEXT, "Leader Activity Report, see attached file.");
Uri fileUri = CachedFileProvider.createFileUri(result.fileName);
if (L.dbg())
L.dbg("Using uri:" + fileUri.toString());
ArrayList<Uri> uris = new ArrayList<Uri>();
uris.add(fileUri);
Uri fileUri2 = CachedFileProvider.createFileUri(result.fileNameDayByDay);
uris.add(fileUri2);
if (L.dbg())
L.dbg("Using uri2:" + fileUri2.toString());
sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
sendIntent.setType("text/plain");
parent.startActivity(sendIntent);
Dưới đây là các nhà cung cấp nội dung
public class CachedFileProvider extends ContentProvider {
private static final String CLASS_NAME = "CachedFileProvider";
public static final String AUTHORITY = "com.josh.lll.file.provider";
private UriMatcher uriMatcher;
@Override
public boolean onCreate() {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(AUTHORITY, "*", 1);
return true;
}
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
try {
String LOG_TAG = CLASS_NAME + " - openFile";
Log.v(LOG_TAG,
"Called with uri: '" + uri + "' - " + uri.getLastPathSegment());
switch (uriMatcher.match(uri)) {
case 1:
String fileLocation = getContext().getCacheDir() + File.separator
+ uri.getLastPathSegment();
Log.i(CLASS_NAME,"Returning file :"+fileLocation);
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(new File(
fileLocation), ParcelFileDescriptor.MODE_READ_ONLY);
return pfd;
default:
Log.v(LOG_TAG, "Unsupported uri: '" + uri + "'.");
throw new FileNotFoundException("Unsupported uri: "
+ uri.toString());
}
} catch (FileNotFoundException t) {
Bug.major(this, t, "Could not return file descriptor");
throw t;
} catch (RuntimeException t) {
Bug.major(this, t, "Could not return file descriptor");
throw t;
} catch (Error t) {
Bug.major(this, t, "Could not return file descriptor");
throw t;
}
}
public static String createFullyQualifiedFileName(Context c, String fileNamePart) {
File cacheDir = c.getCacheDir();
Log.i(CLASS_NAME,"Using cache dir:"+cacheDir);
return cacheDir + File.separator + fileNamePart;
}
public static Uri createFileUri(String fileNamePart) {
return Uri.parse("content://" + AUTHORITY + "/"+ fileNamePart);
}
public int update(Uri uri, ContentValues contentvalues, String s,
String[] as) {
return 0;
}
@Override
public int delete(Uri uri, String s, String[] as) {
return 0;
}
@Override
public Uri insert(Uri uri, ContentValues contentvalues) {
return null;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String s, String[] as1,
String s1) {
return null;
}
}
Đối với cả thành công và 'bị đình trệ' email gửi thông điệp đăng nhập sau được in bằng gmail:
04-03 22:17:35.027: I/Gmail(13206): >>>>> Attachment uri: content://com.josh.lll.file.provider/report_20100401_20130402_LeadetJosh_3_1364980653516.csv
04-03 22:17:35.035: I/Gmail(13206): >>>>> type: text/plain
04-03 22:17:35.035: I/Gmail(13206): >>>>> size: 0
04-03 22:17:35.054: I/Gmail(13206): >>>>> Attachment uri: content://com.josh.lll.file.provider/backup_20100401_20130402_LeadetJosh_3_1364980653516_day_by_day.lll
04-03 22:17:35.054: I/Gmail(13206): >>>>> type: text/plain
04-03 22:17:35.054: I/Gmail(13206): >>>>> size: 0
Sự cố này sẽ biến mất nếu tôi thêm một chuỗi duy nhất vào mỗi tên tệp. Đó không phải là điều tôi muốn làm. – placebojim
Vâng. Trên thực tế nó không hoàn toàn biến mất nó chỉ là ít có khả năng. – placebojim
Xin chào, bạn đã giải quyết được vấn đề này chưa? Tôi đang chạy vào một cái gì đó tương tự, nhưng trong trường hợp của tôi các email được gửi nhưng các tập tin đính kèm bị thiếu. Tôi nhận được cùng một thông điệp tường trình, nhưng kích thước là chính xác. – Pin