Как захватить изображение и отправить его Uri прямо во вложение по электронной почте - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть пользовательский интерфейс, в котором мне нужно захватить изображение, и onActivityResult, я должен отправить его непосредственно на электронную почту, для этого я перепробовал каждое возможное решение в стеке, но каждый раз терпел неудачу, и это не дает мне прикрепить ошибку, после долгого поиска и реализации я нашел что-то, чтобы проверить, если я могу прочитать файл или нет, как это file.canRead(), это всегда дает мне ложь. Любое решение будет оценено.

private fun sendEmail(liscence: String, desc: String) {
val emailIntent = Intent(Intent.ACTION_SEND)
val to = arrayOf("info@gmail.com")
emailIntent.putExtra(Intent.EXTRA_EMAIL, to)

    emailIntent.type = "text/plain";
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

    // attachment Uri comes through camera
    emailIntent.putExtra(Intent.EXTRA_STREAM, imagePath)
    // the mail subject
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report")
    //email body
    val body = "${liscence} \n ${desc}"
    emailIntent.putExtra(Intent.EXTRA_TEXT, body)
    //need this to prompts email client only
    emailIntent.type = "message/rfc822";
    startActivity(Intent.createChooser(emailIntent, "Send email using..."))
}

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Здесь. После долгих исследований я нашел решение в документации по Android

.

https://developer.android.com/reference/android/support/v4/content/FileProvider.html#GetUri

Вот мой окончательный код для отправки захваченного изображения в Gmail.

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

 <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.com.mydomain.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:replace="android:authorities">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/picker_provider_paths" />
    </provider>

XML-файл для провайдера:

<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="image_picked" path="picked/"/>
<external-path name="*" path="Pictures/"/>
</paths>

Функция SendImage в качестве вложения.

    private fun sendEmail() {
    val contentUri = 
    FileProvider.getUriForFile(context!!,
            "yourPackageAndThen.com.mydomain.fileprovider", 
    File(PATH OF IMAGE or FILE ));

    val emailIntent = Intent(Intent.ACTION_SEND)

    //need this to prompts email client only
    emailIntent.type = "message/rfc822";
    val to = arrayOf("EMAIL ID TO SEND")
    emailIntent.putExtra(Intent.EXTRA_EMAIL, to)
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)

    // attachment Uri comes through camera
    emailIntent.putExtra(Intent.EXTRA_STREAM, contentUri)

    // the mail subject
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report")
    //email body
    emailIntent.putExtra(Intent.EXTRA_TEXT, MESSAGEforBody)
    startActivity(Intent.createChooser(emailIntent, "Send email using..."))

}
0 голосов
/ 21 апреля 2019

Вы добавили READ_EXTERNAL_STORAGE разрешение на свое приложение и запросили это разрешение у пользователя в Android SDK больше 23? Кроме того, если вы сохраните вложение как личное, оно не будет читаться почтой. Эта ссылка объясняет это подробнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...