Gmail не отправляет файл, к которому предоставлен общий доступ, но выдает ошибку «недопустимые вложения» - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь поделиться файлом, хранящимся в getExternalFilesDir (), через намерение ACTION_SEND. Я использую FileProvider для предоставления разрешения и создания URI. Выбор, который появляется, включает Сигнал, Gmail и Диск. Если я выберу «Диск», действие выполнится успешно и файл будет загружен в мою учетную запись. Если я выберу сигнал, он пройдет успешно, и мой друг получит файл. Если я выберу Gmail, действие будет выполнено успешно, и я увижу сообщение с вложением с правильным именем и размером. Я заполняю поле «to» и нажимаю «Отправить», композитор исчезает, но сообщение не отправляется и не сохраняется, и возникает ошибка logcat:> java.lang.IllegalStateException: Обнаружены недопустимые вложения во время отправки черновика.

Вот манифест:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

Вот провайдеры_путей:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path
        name="data"
        path="."/>
</paths>

Вот где намерение создается и запускается в MainActivity:

     val uri = getUriForFile(
                    applicationContext,
                    "${BuildConfig.APPLICATION_ID}.fileprovider",
                    file
            )

            Log.d(TAG, "send uri: " + uri)


            Intent(Intent.ACTION_SEND)
                    .apply {
                        //setType("text/plain") // works for drive, but fails for email
                        setType("application/zip")
                        putExtra(Intent.EXTRA_STREAM, uri)
                        putExtra(Intent.EXTRA_SUBJECT, "Armonitor Record:" + file.nameWithoutExtension)
                        putExtra(Intent.EXTRA_TEXT, "See attached...")
                        setFlags(FLAG_GRANT_READ_URI_PERMISSION.or( FLAG_GRANT_WRITE_URI_PERMISSION))
                    }
                    .also {
                        startActivity(Intent.createChooser(it, "share file with"));
                    }

Я знаю, что полномочия файлового провайдера работают, потому что, когда я нарушаю его, я получаю сообщение об ошибке до того, как будет показан выборщик. Я попытался вручную предоставить разрешения любому потребителю намерения в случае, если разрешения будут применяться только к setData uri. Я пробовал различные типы файлов, в том числе "application / octal", "text / plain", "message / rfc822". Файлы, которые я пытаюсь отправить, имеют размер от 0,2 до 38 КБ, и я пробовал файлы .txt и .zip. Я заметил, что если я изменю адрес «с» на другую учетную запись gmail, вложение полностью исчезнет. Письмо может быть успешно отправлено без вложения. На моем телефоне не настроен другой почтовый клиент.

Вот сообщения logcat от gmail для попытки отправить небольшой zip-файл <1 КБ с type = "application / zip". Больший zip-файл (4 КБ) дал немного другой результат: событие compose не выполнено, исключение 1, но ошибка недопустимых вложений, а электронное письмо было сохранено и отправлено без вложения: </p>

2019-07-05 11:29:22.944 11320-13752 W/Gmail: ComposeActivity:Failed to retrieve reference message with uri=null.
2019-07-05 11:29:22.980 2013-2107 I/LaunchCheckinHandler: Displayed com.google.android.gm/.ComposeActivityGmailExternal,wp,ca,316
2019-07-05 11:29:22.981 2013-2107 I/ActivityManager: Displayed com.google.android.gm/.ComposeActivityGmailExternal: +312ms
2019-07-05 11:29:22.988 11320-11320 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:22.988 11320-11320 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:23.011 11320-11320 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:23.011 11320-11320 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:23.016 11320-11320 W/Gmail: ComposeActivity:b/119949571:In finishSetup.
2019-07-05 11:29:23.019 11320-11320 W/Gmail: Gmail:b/119949571:loading bodyWebView with template emit size of 1898.
2019-07-05 11:29:23.114 11320-11320 E/Gmail: Gmail:EditWebView JS Console: b/119949571:draft.editor.onLoad; source: file:///android_asset/draft_editor_gmail_compiled.js at 87
2019-07-05 11:29:23.121 11320-11320 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:23.121 11320-11320 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:23.124 11320-11320 E/Gmail: Gmail:EditWebView JS Console: b/119949571:draft.editor.onLoad is finished; source: file:///android_asset/draft_editor_gmail_compiled.js at 88
2019-07-05 11:29:23.149 11320-11320 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:23.149 11320-11320 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:26.175 11320-11320 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:26.175 11320-11320 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:37.855 11320-13837 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:37.856 11320-13837 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:37.858 11320-13837 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:37.858 11320-13837 W/Gmail: Gmail:No itemId found for event forward
2019-07-05 11:29:37.893 11320-11320 E/Gmail: Gmail:Compose Event 1 failed with reason=1
2019-07-05 11:29:37.909 11320-13837 E/Gmail: sapishim:Exception in saveOrSendDraft: method=send_message
    java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Found invalid attachments while sending the draft
        at afiw.a(SourceFile:3)
        at afiw.get(SourceFile:7)
        at gch.b(SourceFile:1)
        at com.google.android.gm.sapi.SapiUiProvider.call(SourceFile:32)
        at android.content.ContentProvider$Transport.call(ContentProvider.java:403)
        at android.content.ContentResolver.call(ContentResolver.java:1756)
        at din.a(SourceFile:109)
        at din.a(SourceFile:602)
        at doa.run(SourceFile:11)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at ghw.dispatchMessage(SourceFile:1)
        at android.os.Looper.loop(Looper.java:193)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.lang.IllegalStateException: Found invalid attachments while sending the draft
        at jbx.a(Unknown Source:4)
        at afjm.a(SourceFile:2)
        at afjj.run(SourceFile:6)
        at aflq.run(Unknown Source:7)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
        at addr.run(SourceFile:2)
        at abql.run(Unknown Source:3)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6912)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
2019-07-05 11:29:37.910 11320-13837 E/Gmail: Gmail:Draft send failed with reason=11
2019-07-05 11:29:37.943 11320-11320 W/Gmail: Gmail:No collectionId found for event forward
2019-07-05 11:29:37.943 11320-11320 W/Gmail: Gmail:No itemId found for event forward

Что Gmail считает "Неверные вложения"? Как я могу поделиться этими файлами через Gmail?

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

Спасибо за любые ваши идеи.

...