问题标签 [android-mediascanner]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
873 浏览

android - 三星 S3 原生相机导致崩溃的奇怪问题

我的应用程序具有以下代码来调用本机相机的捕获;startActivityForResult

它已经在 nexus 5、HTC 1、nexus 7、三星 S4 和三星 S3 上进行了测试。它适用于除 S3 之外的所有设备。在 S3 上,应用程序在返回开始活动时崩溃

迷恋;撞车;崩溃:

我的代码

我的 onActivityResult 看起来像这样:

0 投票
5 回答
8755 浏览

android - 从 SDCard 删除图像后如何刷新图库

删除 Android SD 卡上的图像时,有时图像会被正确删除,但在图库中仍保留已删除图像的预览。点击它时,它被加载为黑色图像。要解决它,我需要运行MediaScanner. 但是此代码不起作用,并且评论图像的预览仍保留在图库中。

任何人都知道如何解决这个问题。

0 投票
2 回答
3080 浏览

android - Android 下载管理器和媒体扫描器

我正在尝试通过 DownloadManager 下载图像以显示在 Gallery 应用程序中,但我没有做任何事情。根据文档,我认为这段代码就足够了:

但是当文件下载时,它不会显示在图库应用程序中。所以我尝试使用下载接收器手动添加它,如下所示:

那也行不通。带有“文件名”标签的 URI 类似于“content://downloads/my_downloads/97”,而不是下载的实际文件的名称。在下载应用程序中,文件名与服务器上的文件名相同。使用“Media Scanner”标签记录的 Uri 为空。

我在这里错过了一些简单的东西吗?我已经为此拉了几个小时的头发。

0 投票
1 回答
423 浏览

android - Phonegap 3.3.0 将下载的文件 cdvfile url 传递给 Media Scanner

我设法将文件下载到本地存储,但我无法将它的路径传递给媒体扫描仪,因此它被添加到图库中。

我添加了一个执行媒体扫描仪工作的插件。试图做到这一点的功能就是这个。

绝对路径参数是来自 javascript 的 file.toURL()。这是一个看起来像这样的网址。cdvfile://localhost/persistent/Download/13republica_personal.jpg

我试图将其修改为 /Download/13republica_personal.jpg 但它不起作用。

我应该如何将文件 url/位置传递给媒体扫描仪,以便将文件添加到库中?

0 投票
2 回答
1606 浏览

android - Android MediaScanner:从图库中删除图像文件

我正在开发一个在图库应用程序中隐藏图像文件的应用程序。同样,我正在创建一个.nomedia文件并要求 MediaScanner 进行更新。

这种技术适用于我必须显示隐藏文件的情况,即删除 .nomedia 文件并扫描该文件夹中存在的每个文件以显示在画廊中。但是当我想隐藏图像时,放置一个 .nomedia 文件然后要求 MediaScanner 扫描该文件夹中的所有文件并不会从图库中隐藏这些图片。

我正在使用以下代码扫描文件

我做对了吗?或者从媒体商店中删除文件是否需要一些其他的东西?

测试设备:Nexus 5 (4.4.2)

谢谢。

0 投票
1 回答
7055 浏览

android - Android mediaScannerConnection.scanFile 无法刷新图库中的图像

我应该使用 MediaScannerConnection.scanFile 方法以外的方法来刷新图库吗?

保存新的 jpg 后,我运行媒体扫描仪来刷新图库应用程序,如下所示

日志的输出显示以下正确的输出

@@@@ 扫描/data/data/com.mypackage/files/skit_106_01.jpg:

@@@@ -> uri=content://media/external/images/media/95

图库应用程序显示没有可用的媒体

这段代码已经完美运行了一段时间。只有当我针对 4.4.2 版本创建 Android avd 以进行进一步测试时,问题才浮出水面。

我拥有的代码似乎是根据 Androids 文档刷新图库应用程序的推荐方式,所以这个问题可能与我保存文件的方式有关,其代码如下。

更新

代码检查外部存储的可用性并将写入外部存储,如果外部存储不可用,则将文件写入内部存储。

检查外部存储可用性的代码如下所示

如果有人能够在上述任何一项中找出可能有助于解决此问题的漏洞,那就太好了。

0 投票
0 回答
39 浏览

java - 尽管创建了文件夹,但在同一按钮单击事件中计数时未检测到文件夹

我有一个 android 活动,其中在单击按钮时生成了一个文件夹,以及该文件夹中的一些文件。现在我正在尝试以编程方式获取该文件夹中文件数的计数。我的算法有点像这样:

在这种情况下,当我尝试使用countFilesInFolder()对文件进行计数时,尽管文件夹和文件实际上已成功创建,但它仍为零。

但如果我这样做并在第一个按钮之后按下第二个按钮,

它正确计算文件的数量。后来当我检查我的 countFilesInFolder() 函数时,我知道它没有检测到文件夹本身的创建,因此一切都为零。

我尝试使用以下媒体扫描器类来解决这个问题,但它不起作用:

我要求文件创建和计数都必须发生在我在第一个算法中说明的相同按钮单击中。我该怎么做?请假设我上面提到的伪函数都是正确的,因为我已经看到它在我的第二个算法中正常工作。

0 投票
0 回答
328 浏览

android - 如何在通过 MTP 将图像复制到设备时收到通知

我正在写一个类似画廊的应用程序。

我想在通过 MTP 将图像复制到设备时收到通知。

我试图注册一个广播接收器来监听媒体扫描仪完成的动作,但它从来没有被调用过。我尝试在 AndroidManifest.xml 中注册或在 Java 代码中注册,均无效。


或使用 JAVA 代码如下

以上都不起作用。

我的代码有什么问题?我可以看到每次复制新图像时,它都会显示在 Gallery App 中。它可能正在使用内容观察器来观看媒体存储数据库,我不想这样做。

我只想在通过 MTP 将新图像添加到设备存储时收到通知。既然添加到媒体商店,必须由媒体扫描仪完成,为什么我的应用程序无法捕获广播意图?如果这甚至不正确,我想知道我作为标题发布的答案。

0 投票
1 回答
580 浏览

android - 图库缩略图未更新

所以这是场景

遍历一个文件夹,并用另一组图像替换所有图像。

我的期望:在我的画廊中更新图像以及缩略图。

我得到了什么:当我打开我的画廊时,旧图像缩略图仍然存在。当我打开图像时,会出现该图像的替换版本。更奇怪的是,有些图像,当你打开它们时,会快速闪现之前的原始图像,然后是替换的版本,如果你放大那张照片,“惊喜”是旧照片再次(注意:这只是一些图像。 - 不是全部)。但是,所有图像都没有更新的缩略图。

给它 10 分钟然后 bam!,所有图像都已刷新,没有旧的原始图像的痕迹。

不知道为什么它不立即执行。

我也按照此处的说明进行操作。但同样的问题仍然存在。触发扫描整个文件夹最新的 API 不允许扫描整个文件夹,除了系统这样做,因为一些应用程序扫描了一个文件夹,因为只有一个图像发生了变化,从而耗尽了电池寿命。

我的代码

0 投票
1 回答
3234 浏览

android - 使用 MediaStore android 重命名图像

用它们重命名图像后,file.renameTo(file)它们在图库中变灰并且不可用。我尝试了各种 Intent 来重新扫描图像,最后没有希望,一些在旧版本上的工作有些根本不起作用,所以我正在尝试更新MediaStore,但不知道如何正确地做到这一点。

这是我的一些代码

这是我早期的方法之一

另一个

这项工作适用于 19 岁之前,但不适用于 kitkat

这是 MediaStore 之一

此方法在 logcat 中抛出此非致命异常


07-04 02:37:18.448: W/MediaProvider(2947): java.lang.NumberFormatException: Invalid long: "media" 07-04 02:37:18.448: W/MediaProvider(2947): at java.lang.Long .invalidLong(Long.java:124) 07-04 02:37:18.448: W/MediaProvider(2947): 在 java.lang.Long.parse(Long.java:361) 07-04 02:37:18.448: W /MediaProvider(2947): at java.lang.Long.parseLong(Long.java:352) 07-04 02:37:18.448: W/MediaProvider(2947): at java.lang.Long.parseLong(Long.java: 318) 07-04 02:37:18.448: W/MediaProvider(2947): 在 android.content.ContentUris.parseId(ContentUris.java:86) 07-04 02:37:18.448: W/MediaProvider(2947): 在com.android.providers.media.MediaThumbRequest.(MediaThumbRequest.java:93) 07-04 02:37:18.448: W/MediaProvider(2947): 在 com.android.providers.media.MediaProvider.requestMediaThumbnail(MediaProvider.java:3742) 07-04 02:37:18.448: W/MediaProvider(2947): 在 com.android.providers.media.MediaProvider.update(MediaProvider.java:4353) 07-04 02:37:18.448: W/ MediaProvider(2947): 在 android.content.ContentProvider$Transport.update(ContentProvider.java:287) 07-04 02:37:18.448: W/MediaProvider(2947): 在 android.content.ContentProviderNative.onTransact(ContentProviderNative.java :215) 07-04 02:37:18.448: W/MediaProvider(2947): 在 android.os.Binder.execTransact(Binder.java:404)ContentProviderNative.onTransact(ContentProviderNative.java:215) 07-04 02:37:18.448: W/MediaProvider(2947): 在 android.os.Binder.execTransact(Binder.java:404)ContentProviderNative.onTransact(ContentProviderNative.java:215) 07-04 02:37:18.448: W/MediaProvider(2947): 在 android.os.Binder.execTransact(Binder.java:404)

编辑:我相信这是可以做到的。因为当我重命名或添加一些媒体文件时,然后使用 ES 文件资源管理器并更改包含该媒体的文件夹的路径,它们会出现在图库中并添加到媒体存储中,如果您有很多媒体,则需要一些时间来重新生成缩略图在那个文件夹上。顺便说一下,我在重命名图像文件时会查看 logcat:Media Provider object removed然后是一些带有art关于 crating bitmap 的标签的 logcat,我确信这样做的唯一方法是使用新数据和位图更新 MediaStore。现在如何查找和删除以前的数据MediaStore并添加新数据?如果我从 MediaStore 中删除它,是否会导致从磁盘中删除该文件?

提前致谢