dji-sdk / Mobile-SDK-Android

DJI Mobile SDK for Android: http://developer.dji.com/mobile-sdk/
Other
998 stars 580 forks source link

M300拍照返回的medialfile中的文件名与相机内存卡中的文件名不一致 #1060

Open yand9807 opened 3 years ago

yand9807 commented 3 years ago

用m300拍照,在相机毁掉中接收mediafile对象,调用mediaFile.getFileName();取到的文件名与相机内存卡里实际保存的文件名不一致。例如内存卡中的实际文件名叫:DJI_20211110092545_0001_Z.JPG,而我取到的文件名叫:DJI_20211110092546_0000_Z.JPG。中间的时间戳和后四位的序号都不一样。

dji-dev commented 3 years ago

Agent comment from DJI SDK in Zendesk ticket #56077:

尊敬的开发者,感谢您联系DJI 大疆创新 由于github不是我们主要的咨询渠道,您的问题可能跟进不及时。我们建议您通过填写表单( https://djisdksupport.zendesk.com/hc/zh-cn/requests/new )向我们反馈问题。或者您也可以在论坛发帖,与其它开发者交流。论坛链接:https://djisdksupport.zendesk.com/hc/zh-cn/community/topics

Dear developer, thank you for contacting DJI. Since github is not our main consultation channel, your questions may not be followed up in time. We recommend that you fill in the form (https://djisdksupport.zendesk.com/hc/en-us/requests/new) to report problems to us. Or you can post in the forum to communicate with other developers. Forum link: https://djisdksupport.zendesk.com/hc/zh-cn/community/topics

°°°

DJI-William commented 3 years ago

这个问题在最新的MSDK版本4.15.1里面修了,要使用最新的固件和MSDK版本。另外用setNewGeneratedMediaFileInfoCallback这个回调查看新的照片,不要用setMediaFileCallback。

yand9807 commented 3 years ago

这个问题在最新的MSDK版本4.15.1里面修了,要使用最新的固件和MSDK版本。另外用setNewGeneratedMediaFileInfoCallback这个回调查看新的照片,不要用setMediaFileCallback。

可是setNewGeneratedMediaFileInfoCallback返回的MediaFileInfo对象里没有能获取文件名的方法

DJI-William commented 3 years ago

MediaFileInfo会告诉你index,然后通过index去getSDCardSnapshot的list里找这个MediaFile就可以获取名称了。

yand9807 commented 2 years ago

MediaFileInfo会告诉你index,然后通过index去getSDCardSnapshot的list里找这个MediaFile就可以获取名称了。

试了一下这个方法,找不到对应的照片,下面是我的代码:

MediaManager mediaManager = c.getMediaManager();
List<MediaFile> mediaFileList = mediaManager.getSDCardFileListSnapshot();
int index = mediaFileInfo.getIndex();
  MediaFile mediaFile = null;
  for (MediaFile item : mediaFileList) {
      if(item.getIndex() == index){
          mediaFile = item;
          break;
      }
  }

mediaFileInfo是setNewGeneratedMediaFileInfoCallback返回的,mediaFileList 永远只有19条数据,而这19条数据中找不到能跟mediaFileInfo的index匹配的数据。 我用的是H20T镜头,固件都已升级至最新

yand9807 commented 2 years ago

我尝试将mediaManager.getSDCardFileListSnapshot();放到refreshFileListOfStorageLocation回调中执行也没有效果,而且有时候会返回系统繁忙错误。像这样:

mediaManager.refreshFileListOfStorageLocation(SettingsDefinitions.StorageLocation.SDCARD, new CommonCallbacks.CompletionCallback() {
                                            @Override
                                            public void onResult(DJIError djiError) {
                                                List<MediaFile> mediaFileList = mediaManager.getSDCardFileListSnapshot();
                                            }
                                        });
DJI-William commented 2 years ago

首先保证你的飞机和相机是V3固件,使用4.16版本。setNewGeneratedMediaFileInfoCallback的回调产生后,首先enterPlayback,再refreshFileListOfStorageLocation,再getSDCardFileListSnapshot,然后用item.getIndex() == index进行对比。如果mediaFileList 永远只有19条数据则说明refreshFileListOfStorageLocation失败了,你需要打印下djiError.getDescription。系统繁忙错误是对相机调用太频繁了。你可以看看这个demo。 Link:https://github.com/DJI-Mobile-SDK-Tutorials/Android-MediaManagerDemo