ミッドランドブログ

長めのお知らせ、紹介記事を掲載します

【Flutter】撮影した動画をimage_gallery_saverで保存しようとしたらExceptionが出た話

Android端末で、cameraプラグインで撮影した動画をImageGallerySaverを使って保存しようとしたら、下記のエラーが出ました

 

pub.dev

 

pub.dev

 

E/MethodChannel#image_gallery_saver( 5389): Failed to handle method call
E/MethodChannel#image_gallery_saver( 5389): java.lang.IllegalArgumentException: MIME type application/octet-stream cannot be inserted into content://media/external/images/media; expected MIME type under image/*

 

パスに空白文字等があるとエラーになるという話を見かけたので、cameraから渡されたパスを確認したらこのようなものでした。
/data/user/0/[パッケージID]/cache/REC2004549943054014171.temp


.tempという拡張子ではImageGallerySaverが動画として認識できなかったようです。
REC2004549943054014171.temp.mp4といった感じでリネームしたら保存ができるようになりました。

 


  Future onStopButtonPressed() async {
    final CameraController? cameraController = controller;
   stopVideoRecording().then((XFile? file) async {

      if (file != null) {
        String tmpPath = file.path;
        print(tmpPath);

        try {
          if (tmpPath.contains('.mp4') || tmpPath.contains('.MP4')) {
          } else {

            File tmpfile = File(tmpPath);
            tmpPath = tmpPath + '.mp4';
            File newFile = await tmpfile.renameSync(tmpPath);
          }
          
          final result = await ImageGallerySaver.saveFile(tmpPath,
              isReturnPathOfIOS: isIOS);
          print(result);

         
        } catch (e) {
          print(e);
        }
      }
    });
 }