Получение "Не удалось найти настроенное root, которое содержит / data / data /" исключение Android - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь поделиться снимком экрана с моей активностью.

Я создаю растровое изображение, подобное этому

fun createImageToShare(): Bitmap {
        val b =
            Bitmap.createBitmap(
                recyclerViewGroups.getWidth(),
                recyclerViewGroups.getHeight(),
                Bitmap.Config.ARGB_8888
            )
        val c = Canvas(b)
        recyclerViewGroups.draw(c)
        return b
    }

Затем я пытаюсь сохранить растровое изображение в файл, подобный этому

fun saveBitmapToFile(bitmap: Bitmap): File? {
        try {
            val dir = File(this.cacheDir,"myfolder").apply { mkdirs() }
            val fileName = "myfile.jpg"
            val file = File(
                dir,
                fileName
            )
            println("file path ${file.path}")
            val fOut = FileOutputStream(file)


            bitmap.compress(
                Bitmap.CompressFormat.JPEG,
                85,
                fOut
            ) 
            fOut.close()
            return file
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return null
    }

Затем я пытаюсь поделиться этим файлом, используя SHARE_INTENT следующим образом

R.id.menu_share -> {
                try {
                    val bmp = createImageToShare()
                    val str = saveBitmapToFile(bmp)
                    val uri = FileProvider.getUriForFile(this,"com.mypackage.myrepo.fileprovider",str!!)
                    println("URI PATH $uri")
                    val shareIntent: Intent = Intent().apply {
                        action = Intent.ACTION_SEND
                        putExtra(Intent.EXTRA_STREAM, uri)
                        type = "image/jpeg"
                    }
                    startActivity(Intent.createChooser(shareIntent, "Share to"))
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }

У меня есть Permissions и Provider, как это в моем файле манифеста

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Внутри тега Application

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.mypackage.myrepo.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">

            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

Это содержимое моего file_paths

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path
        name="myrepo"
        path="myfolder/" />
    <external-files-path
        name="myrepo"
        path="myfolder/"/>
</paths>

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

file path /data/user/0/com.mypackage.myrepo/cache/myfolder/myfile.jpg

и я получаю исключение

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.mypackage.myrepo/cache/myfolder/myfile.jpg
    at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:744)
    at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
    at com.mypackage.myrepo.group.GroupActivity.onOptionsItemSelected(GroupActivity.kt:109)
    at android.app.Activity.onMenuItemSelected(Activity.java:3543)

Я просто хочу поделиться изображением своей деятельности. Расположение файла может быть внутренним или внешним, но, похоже, ничего не работает. Любая помощь будет принята с благодарностью. Спасибо

...