将文件添加到 Android 中的媒体库时出现“java.lang.IllegalStateException:未连接到 MediaScannerService”
Posted
技术标签:
【中文标题】将文件添加到 Android 中的媒体库时出现“java.lang.IllegalStateException:未连接到 MediaScannerService”【英文标题】:"java.lang.IllegalStateException: not connected to MediaScannerService" when adding a file to the media library in Android 【发布时间】:2013-05-10 08:00:42 【问题描述】:我在我的应用程序的一些崩溃报告中收到了这个 java.lang.IllegalStateException: not connected to MediaScannerService
异常。
它们不是太多,但我不知道我的代码有什么问题,因为在我的手机/模拟器上它可以正常工作。 我正在使用一种方法来调用根据How to get and set (change) ID3 tag (metadata) of audio files? 的 SO 问题/答案改编的 MediaScanner
方法:
public static void scanMedia(Context context, final File[] file, final String[] mime)
msc = new MediaScannerConnection(context, new MediaScannerConnectionClient()
public void onScanCompleted(String path, Uri uri)
Utils.logger("d", "Scanned " + path + ":", DEBUG_TAG);
Utils.logger("d", "-> uri: " + uri, DEBUG_TAG);
msc.disconnect();
public void onMediaScannerConnected()
for (int i = 0; i < file.length; i++)
msc.scanFile(file[i].getAbsolutePath(), mime[i]);
);
msc.connect();
我的电话:
Utils.scanMedia(getApplicationContext(),
new File[] myVideo,
new String[] "video/*");
或
Utils.scanMedia(getApplicationContext(),
new File[] myOtherVideo, myAudio,
new String[] "video/*", "audio/*");`
如何避免这些异常?
【问题讨论】:
【参考方案1】:这是一个竞争条件。您正在 onMediaScannerConnected()
方法中迭代多个文件。但是你disconnect()
你用来添加文件的连接。
假设您有三个文件。文件一开始,对于文件二,您也可以拨打scanFile()
没有任何问题。但是在您为第三个文件调用scanFile()
之前,第一个文件已经完成。因此,android 调用您的回调方法onScanCompleted()
。在这里你调用disconnect()
从而关闭你想用于第三个文件的连接。因此,第三个scanFile()
call 连接不再有效!
这可能会发生,也可能不会。取决于哪个线程运行多快并以特定顺序获得处理时间。因此,您只会时不时地收到此异常。
如果您愿意,我会提供一个包含 ytdownloader 修复程序的拉取请求。
【讨论】:
你太棒了,我的朋友……和YES
显然我会喜欢一个拉取请求。 ;)
来自 Wolfram 博客的解决方案:grokkingandroid.com/…
感谢链接和 ytdownloader 源中的评论!以上是关于将文件添加到 Android 中的媒体库时出现“java.lang.IllegalStateException:未连接到 MediaScannerService”的主要内容,如果未能解决你的问题,请参考以下文章
通过我的应用程序将pdf发送到android 11中的whatsapp时出现发送失败错误
将具有多个模块的 Android 库发布到 jFrog 工件时出现问题
Android:将标题视图添加到 ExpandableListView 时出现 ClassCastException
使用 Android 库 (AAR) 时出现 AndroidRuntime 错误 ClassNotFoundException