将文件添加到 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中添加truetime库时出现错误

Android:将标题视图添加到 ExpandableListView 时出现 ClassCastException

使用 Android 库 (AAR) 时出现 AndroidRuntime 错误 ClassNotFoundException