ОБНОВЛЕНИЕ 3: Похоже, все это было вызвано обновлением OTA до KitKat 4.4. Сила остановки и очистки данных приложения GMail исправил проблему. Не очень удобный результат обновления OTA.
ОБНОВЛЕНИЕ 2: Авария происходит исключительно из-за новой обработки файлов Gmail в Android 4.4 KitKat. При добавлении любого другого файла в качестве вложения, чем изображения или видео, GMail падает при отправке электронной почты. Зачем удалять функциональность своего приложения?
Кто-нибудь знает, где сообщать об ошибках GMail? Я могу воспроизвести аварии, просто используя GMail (не мой собственный код):
Создать новое письмо
Добавить приложение (только 2 варианта: «Прикрепить изображение» или «Прикрепить видео»)
Выберите один из них.
Выберите браузер файлов (например, ES-файл-проводник), чтобы выбрать zip / apk / … (или другой файл, который не является изображением / видео)
Gmail падает при отправке почты.
ОБНОВИТЬ:
Авария произошла на моем Nexus 4, запущенном официальном (OTA) KitKat. Тем не менее, работает тот же самый код на моем Samsung Galaxy S2, работающем CM10.2 в ночное время (Jelly Bean), прекрасно работает. Он также работает на вкладке Samsung Galaxy Tab 2 4.0.4.
Разбита ли GMail на KitKat?
Nexus 4 имеет версию GMail 4.6.1 (920375) Galaxy S2 имеет версию GMail 4.6 (836823)
Исходный вопрос (решено, см. Обновление 3):
У меня есть следующий код в приложении для Android:
Intent email = new Intent(Intent.ACTION_SEND); email.putExtra(Intent.EXTRA_EMAIL, new String[]{"xxx@gmail.com"}); email.putExtra(Intent.EXTRA_SUBJECT, "MetroNavigator data"); email.setType("application/zip"); email.putExtra(Intent.EXTRA_TEXT, "This email contains tracking data generated by the MetroNavigator app."); email.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + file.getAbsolutePath())); startActivity(Intent.createChooser(email, "Choose a mail client to send the data:"));
Это кажется отличным, поскольку zip-файл добавлен в адрес электронной почты правильно (вы можете видеть, что, поскольку GMail упоминает размер файла, которого нет, если путь к файлу неверен).
Скриншот: (У меня нет 10 репу, но я не могу вставлять его) http://i.imgur.com/UkMQZLG.png
Однако при отправке почты GMail падает, давая следующий результат:
11-23 12:22:38.451 31900-32089/? E/AndroidRuntime﹕ FATAL EXCEPTION: SyncAdapterThread-1 Process: com.google.android.gm, PID: 31900 java.lang.NullPointerException at android.content.ContentResolver.openInputStream(ContentResolver.java:613) at com.google.android.gm.provider.MailEngine$PublicMailStore.getInputStreamForUploadedAttachment(MailEngine.java:5591) at com.google.android.gm.provider.MailSync$AttachmentPartSource.newInputStream(MailSync.java:3968) at com.google.android.gm.provider.MailSync$AttachmentPartSource.<init>(MailSync.java:3941) at com.google.android.gm.provider.MailSync$ProtoOperationSink.messageSavedOrSent(MailSync.java:3708) at com.google.android.gm.provider.Operations.provideNormalOperations(Operations.java:586) at com.google.android.gm.provider.MailEngine$PublicMailStore.provideOperations(MailEngine.java:5290) at com.google.android.gm.provider.MailSync.nextSyncRequest(MailSync.java:853) at com.google.android.gm.provider.MailEngine.runSyncLoop(MailEngine.java:2217) at com.google.android.gm.provider.MailEngine.sync(MailEngine.java:2014) at com.google.android.gm.provider.MailEngine.performBackgroundSync(MailEngine.java:1936) at com.google.android.gm.provider.MailSyncAdapterService$SyncAdapterImpl.onPerformLoggedSync(MailSyncAdapterService.java:58) at com.google.android.common.LoggingThreadedSyncAdapter.onPerformSync(LoggingThreadedSyncAdapter.java:33) at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)
Я прочитал другие вопросы, связанные с вложениями, которые вы не можете загрузить вложение из внутреннего хранилища, но я использую
Environment.getExternalStorageDirectory().toString();
Как основу для каждого пути, и я включил
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
В моем манифесте. Также это приложение GMail, которое падает, а не мое. Есть идеи? Это ошибка в GMail?
Хотелось бы полюбить некоторый вклад здесь.
Заранее спасибо,
Томас
Как упоминалось в обновлении 3 моего первоначального вопроса, виновник является коррумпированным приложением gmail. Исправление данных устраняет проблему.
Измените код:
Uri.parse("file://" + file.getAbsolutePath()));
Для того, чтобы:
Uri.fromFile(file)
Я удалил приложение Gmail и переустановил его, и все стало работать для меня.