android - 如何使用文件提供程序从内部存储图片目录中打开图库中的图像
问题描述
我正在开发一个应用程序,在该应用程序中,我将图像保存在内部存储中的图片目录中,并且在保存图像后,我正在显示一个使用文件提供程序在图库中查看图像的按钮,但问题是每当我单击打开图像按钮时它显示带有感叹号的灰色。这是我的代码:
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>
单击按钮后在图库中显示的图像
以及 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
解决方案
推荐阅读
- ios - 我收到“ WARN | url: (homepage) URL is not reachable。” 在 iOS pod lib lint 命令上?
- php - 为什么 phpinfo() 显示的版本与 php -v 不同?
- php - 如何在 php mysql 中汇总递归循环的奖金?
- jquery - 更改通过 jquery 中的 .after 方法加载的 div 的值/内容
- ios - IOS swift tableview get headerview for a section
- node.js - NodeJS/Express 使用多个 req.query.params 构建 URL
- php - 无法在 PDO 中使用 AJAX 进行产品过滤的 $_GET 数据
- python - ValueError:无法将字符串转换为浮点数:''python
- javascript - 拦截完整的日历视图更改操作以进行 api 调用
- python - 没有在 Django 中使用 Python 请求设置 CSRF 令牌