dj.*_*xss 19 android mediastore insert-image
我有一些代码,我运行方法MediaStore.Images.Media.insertImage(从源而不是文件名插入),此代码将图像保存到MediaStore并返回图像的uri.我知道当它因任何原因失败时它将返回null而不是uri.此图片已被许多人多次下载,并且每隔一段时间它将从此方法返回null.我从来没有遇到过这种情况,所以我不知道发生了什么.这可能发生的原因是什么?还有另一篇文章有相同的问题,但答案是MediaStore源代码的链接,但该链接转到一个页面说链接不可用.任何帮助,将不胜感激.谢谢.
删除我的SD卡后,我收到了这个错误,所以我知道这可能是一个原因,我不确定,但我觉得如果卡已满,也会发生这种情况.仍然只是想知道是否还有其他原因.
tho*_*asd 16
当某些版本的Android上没有/ sdcard/DCIM/Camera目录时,似乎会发生这种情况.创建这个目录(并拥有权限)解决了我的问题.
MediaStore.Images.Media.insertImage实际上是访问外部存储来保存图像.
一些可能导致您的应用失败的重要提醒:
如果处于大容量存储模式,USB连接将阻止SD卡使用.
可能还有其他因素可能导致SD卡无法访问,因此请确保您可以先使用文件浏览器访问SD卡.
确保使用android.permission.WRITE_EXTERNAL_STORAGE正确配置了您的权限
这里发布这个是为了完整性,因为我从insertImage得到一个null,原因是1.
小智 6
我遇到了同样的问题,但没有任何效果。但3个小时后终于成功了。
解决方案:我发现它工作正常,直到我们从图片库中删除该图像。之后它开始返回null。但突然我尝试更改标题和描述名称,它就像一个魅力。
所以我添加了一个带有位图标题和描述的日期。如果用户从文件管理器中手动删除位图。仍然有效。
private fun insertImage(cr: ContentResolver,
source: Bitmap?,
title: String,
description: String
): String? {
val sdf = SimpleDateFormat("MM-dd-yyyy-hh.mm.ss.SSS.a", Locale.US)
val date=sdf.format(Date())
val values = ContentValues()
values.put(Images.Media.TITLE, title)
values.put(Images.Media.DISPLAY_NAME, title+date)
values.put(Images.Media.DESCRIPTION, description+date)
values.put(Images.Media.MIME_TYPE, "image/jpeg")
// Add the date meta data to ensure the image is added at the front of the gallery
values.put(Images.Media.DATE_ADDED, System.currentTimeMillis() / 1000)
values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis())
var url: Uri? = null
var stringUrl: String? = null /* value to be returned */
try {
url = cr.insert(Images.Media.EXTERNAL_CONTENT_URI, values)
if (source != null) {
val imageOut = cr.openOutputStream(url!!)
try {
source.compress(Bitmap.CompressFormat.JPEG, 50, imageOut)
} finally {
imageOut!!.close()
}
} else {
cr.delete(url!!, null, null)
url = null
}
} catch (e: Exception) {
if (url != null) {
cr.delete(url, null, null)
url = null
}
}
if (url != null) {
stringUrl = url.toString()
}
return stringUrl
}
Run Code Online (Sandbox Code Playgroud)
我实现了在这个应用程序中共享新闻位图,并且工作正常。享受!
小智 5
当我在带有全新SD卡图像的模拟器上运行测试时遇到了这个问题.我能够通过创建来解决问题/sdcard/Pictures与
new File("/sdcard/Pictures").mkdirs();
确保您已在清单文件中添加权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
然后在调用之前添加这段代码
MediaStore.Images.Media.insertImage
File sdcard = Environment.getExternalStorageDirectory();
if (sdcard != null) {
File mediaDir = new File(sdcard, "DCIM/Camera");
if (!mediaDir.exists()) {
mediaDir.mkdirs();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12719 次 |
| 最近记录: |