FileProvider в Android 4.1 / 4.3 / 4.4 Приложение электронной почты не работает, столбец «_data» не существует

У меня есть FileProvider который я использую при прикреплении файлов на SD-карте к электронным письмам.

Это работает на Lollipop и Marshmallow в любом приложении, используя Intent .

Однако в Android 4.3 при использовании приложения Email вложение появляется в письме при составлении, но когда оно отправлено, на конце получателя вложения нет. Для всех других тестируемых приложений он работает (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))); 

EDIT Я нашел трассировку стека Исключения, которая встроена в предложение @ CommonsWare

 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) 

Solutions Collecting From Web of "FileProvider в Android 4.1 / 4.3 / 4.4 Приложение электронной почты не работает, столбец «_data» не существует"

Я знаю, возможно, это было поздно, но я наткнулся на ту же проблему, и мне потребовалось некоторое время, чтобы найти мою ошибку:

Моя ошибка заключалась в том, что я удаляю исходный файл, который мне нравится отправлять, когда мое приложение вернулось из приложения электронной почты. (Я пытался очистить временные файлы)

К сожалению, приложение электронной почты не отправляет почту сразу и не делает копию вложения. Поэтому, когда файл будет удален до отправки почты (как и я), приложение было потеряно.

Такое поведение отличается от большинства других приложений (включая gmail-app), которые заботятся о файле перед возвратом в мое приложение.

Речь идет о базе данных sqlite.

Есть 2 возможности

  1. Вы что-то изменили в базе данных или таблице.

или

  1. Ваше поле доступа, которое может быть неправильным или отсутствовать в коде.

Решение:

  1. Удалите приложение и снова проверьте его с новыми изменениями в db.

  2. Исправить код базы данных.