android - "java.lang.IllegalStateException: not connected to MediaScannerService"在Android中添加文件到媒体库时

标签 android illegalstateexception android-mediascanner

我在我的应用程序的一些崩溃报告中收到此 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/*"});`

如何避免这些异常?

最佳答案

这是一个竞争条件。您正在 onMediaScannerConnected() 方法中迭代多个文件。但是您disconnect() 用于添加文件的连接。

假设您有三个文件。文件一开始,对于文件二,您也可以毫无问题地调用 scanFile()。但是在您为第三个文件调用 scanFile() 之前,第一个文件已经完成。因此 Android 调用您的回调方法 onScanCompleted()。在这里您调用 disconnect() 从而关闭您想要用于第三个文件的连接。因此,对于第三个 scanFile() 调用,连接不再有效!

这可能会发生,也可能不会。取决于哪个线程运行得有多快,并以哪种特定顺序获得处理时间。因此,您只是时不时地遇到此异常。

如果您愿意,我会提供一个包含 ytdownloader 修复程序的拉取请求。

关于android - "java.lang.IllegalStateException: not connected to MediaScannerService"在Android中添加文件到媒体库时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477635/

相关文章:

android - ListView 向上滚动卡住

android - 选择大于 3mb 的照片时,cordova 应用程序崩溃

android - IllegalStateException: fragment <ThisFragment> 当前不在 FragmentManager 中

android-layout - java.lang.IllegalStateException : Required view not found even after setContentView() 错误

Android ACTION_MEDIA_SCANNER_SCAN_FILE 在重启之前不显示图像?

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

android - 使用新创建的位图更新 android 图片库

java - fragment 内单选按钮 OnCheckedChangeListener 错误

java - Mac 上的 ChromeDriver 错误 : java. lang.IllegalStateException

Android Activity 堆栈操作