Android 4.1 / 4.3 / 4.4中的FileProvider电子邮件应用失败,列'_data'不存在

我在将SD卡上的文件附加到电子邮件时使用了FileProvider

这可以在任何使用Intent应用程序中使用LollipopMarshmallow

然而,在Android 4.3当使用Email应用程序时,附件在撰写时出现在电子邮件中,但是在发送时附件不在那里。 对于所有其他testing的应用程序(Gmail,Evernote,Drive)。

我不是在发送电子邮件之前删除文件。

这是我的代码。

 final Intent fileShareIntent = new Intent(android.content.Intent.ACTION_SEND); fileShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, emailSubject); fileShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailText); Uri fileUri = STFileProvider.getContentUriForProvidedFile(this,file); fileShareIntent.putExtra(Intent.EXTRA_STREAM,fileUri); fileShareIntent.setType(mimeType); fileShareIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{prefs.getString("default_email_preference", "")}); startActivity(Intent.createChooser(fileShareIntent,getString(R.string.share_with))); 

编辑我已经find了一个exception的堆栈跟踪@内容与CommonsWare的build议

 01-04 17:39:00.430 6828-6828/? W/System.err: java.lang.IllegalArgumentException: column '_data' does not exist 01-04 17:39:00.430 6828-6828/? W/System.err: at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303) 01-04 17:39:00.430 6828-6828/? W/System.err: at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.email.activity.MessageCompose.getFilePath(MessageCompose.java:21476) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.email.activity.MessageCompose.getFilePathOfAttachment(MessageCompose.java:17710) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.email.activity.MessageCompose.addAttachment(MessageCompose.java:19140) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.email.activity.MessageCompose.access$11000(MessageCompose.java:362) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.email.activity.MessageCompose$LoadAttachmentsTaskFromIntent.onProgressUpdate(MessageCompose.java:15277) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.email.activity.MessageCompose$LoadAttachmentsTaskFromIntent.onProgressUpdate(MessageCompose.java:15101) 01-04 17:39:00.430 6828-6828/? W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:647) 01-04 17:39:00.430 6828-6828/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99) 01-04 17:39:00.430 6828-6828/? W/System.err: at android.os.Looper.loop(Looper.java:176) 01-04 17:39:00.430 6828-6828/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5419) 01-04 17:39:00.430 6828-6828/? W/System.err: at java.lang.reflect.Method.invokeNative(Native Method) 01-04 17:39:00.430 6828-6828/? W/System.err: at java.lang.reflect.Method.invoke(Method.java:525) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 01-04 17:39:00.430 6828-6828/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 01-04 17:39:00.430 6828-6828/? W/System.err: at dalvik.system.NativeStart.main(Native Method) 

我知道,可能会迟到,但是我偶然发现了同样的问题,花了我一些时间才发现我的错误:

我的错是,当我的应用程序从电子邮件应用程序回来时,我删除了我喜欢发送的原始文件。 (我试图清理临时文件)

不幸的是,电子邮件应用程序不会马上发送邮件,也不会创build附件的副本。 所以当邮件发送之前文件会被删除(就像我这样做),附件就会丢失。

这种行为是不同的大多数其他应用程序(包括gmail-app),在返回到我的应用程序之前照顾该文件。

这是关于数据库sqlite。

有两种可能性

  1. 你在数据库或表中改变了一些东西。

要么

  1. 您的访问字段可能不正确或不存在于代码中。

解:

  1. 卸载应用程序,并再次在数据库中进行testing。

  2. 纠正你的数据库代码。