Как открыть изображение в галерее из внутреннего каталога изображений с помощью файлового провайдера - PullRequest
0 голосов
/ 23 марта 2020

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

MainActivity.kt

fun openDownloadImage(){

        var fileName  = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString() +"/${Environment.DIRECTORY_PICTURES}/MY_FOLDER_NAME/" +File(newUri).name


        var newFilePath = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) , fileName)


        var uri: Uri = GenericFileProvider.getUriForFile(this, "com.mypackage.name.provider", newFilePath)


        val resInfoList: List<ResolveInfo> = this.getPackageManager()
            .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
        for (resolveInfo in resInfoList) {
            val packageName: String = resolveInfo.activityInfo.packageName
            this.grantUriPermission(
                packageName,
                uri,
                Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
            )
        }

        val intent = Intent(Intent.ACTION_VIEW)

        intent.setDataAndType(uri, "image/*")

        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION;

        val resolvedInfoActivities: List<ResolveInfo> = packageManager.queryIntentActivities(
            intent,
            PackageManager.MATCH_DEFAULT_ONLY
        )
        for (ri in resolvedInfoActivities) {
            this.grantUriPermission(
                ri.activityInfo.packageName,
                uri,
                Intent.FLAG_GRANT_READ_URI_PERMISSION
            )
        }
        startActivity(intent)
    } 

Манифест. xml

тег провайдера b / w тег приложения

<provider
            android:name=".GenericFileProvider"
            android:authorities="com.mypackage.name.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>

provider_paths. xml

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

Изображение, которое отображается в галерее после нажатия кнопки

image showing in gallery after click on button

И ошибка галереи в logcat

2020-03-23 17:42:33.315 32228-32270/? E/Gallery: [2897/QuickViewNavigatorCo] loadThumbnailAsSync : null bitmap MediaItem{i,-1,-1,0,UriItem (0,0,0,0:0,0,image/jpeg:0,0:false:null:-909788947) ,GfoY2/imIVudOKYhWXimIVu4piFdOKXjzov4piFL2lu4pePLuKYhWHimIVr4piFc+KYhWjil49h4pePeeKYhXJh4piFbuKYhWEu4piFbWXil49t4pePZXMu4pePcOKXj3LimIVv4pePdmlk4pePZXIv4pePaeKYhW504piFZeKXj3Lil49u4piFYeKXj2wl4pePMuKXjzBzdG9y4piFYeKYhWfil49l4pePL1BpY+KYhXR14pePcuKYhWXil49z4pePL01l4pePbWVzKELimIVl4piFc+KXj3Til49fTeKYhWXimIVt4pePZXMpL07il49h4piFQ+KXj3fil4834piFOGxj4pePSOKYhUbil4924piFTOKXj3F64pePUeKYhVDil49L4piFU+KXj0TimIVt4pePLuKYhWril49wZw==7qOSC8R}
2020-03-23 17:42:33.591 32228-32262/? E/Gallery: [2930/         BeamManager] BeamManager : setBeamUris > can't load nfcadapter
2020-03-23 17:42:33.724 32228-32228/? E/Gallery: [2946/ImageViewerPresenter] preloadThumbnail item is broken
2020-03-23 17:42:33.727 32228-32228/? E/Gallery: [2952/ ImageViewerFragment] display rect is null or tag view is null
2020-03-23 17:42:33.769 32228-32228/? E/Gallery: [2973/ ImageViewerFragment] display rect is null or tag view is null


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