android – 用于KitKat的GMail在发送非图像或视频的附件时崩溃

更新3:
似乎这一切都是由OTA升级到KitKat 4.4引起的.强制停止和清除GMail应用程序的数据解决了这个问题.不是OTA更新的用户友好结果.

更新2:
崩溃完全是由于Android 4.4 KitKat中新的Gmail文件处理造成的.当添加任何其他文件类型作为附件而不是图像或视频时,GMail会在发送电子邮件时崩溃.为何删除其应用的功能

有谁知道在哪里报告GMail错误?我可以通过使用GMail(而不是我自己的代码)重现崩溃:

>撰写新电子邮件
>添加附件(仅2个选项:“附加图像”或“附加视频”)
>选择其中一个.
>选择文件浏览器(如ES文件浏览器)选择zip / apk / …(或其他不是图像/视频的文件)
> Gmail在发送邮件时崩溃.

更新:

崩溃发生在我的Nexus 4运行官方(OTA)KitKat上.
但是,在我的三星galaxy S2上运行相同的代码每晚运行CM10.2(Jelly Bean)工作正常.它也适用于运行4.0.4的三星galaxy Tab 2.

是否在KitKat上破坏了GMail?

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应用程序.清除数据可以解决问题.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...