大疆无人机安卓Mobile Sdk开发(二)连接无人机,获取无人机信息
大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointMission
大疆无人机安卓Mobile Sdk开发(四)读取飞机的图片和视频并下载
大疆无人机安卓Mobile Sdk开发(五)解决M300Rtk H20相机无法获取图片视频的问题
qq 505057618 接mobilesdk开发,有需求可以联系
二话不说,直接上代码
首先要获取到mediaManager ,并且需要判断isMediaDownloadModeSupported是否为true,只有为true才能将camera设置成MEDIA_DOWNLOAD 模式,这样才能获取到媒体库文件。
if (camera != null) {
mediaManager = camera.getMediaManager();
boolean downloadSupported = camera.isMediaDownloadModeSupported();
if (mediaManager != null && downloadSupported) {
camera.getStorageLocation(new CommonCallbacks.CompletionCallbackWith<SettingsDefinitions.StorageLocation>() {
@Override
public void onSuccess(SettingsDefinitions.StorageLocation storageLocation) {
mediaType = storageLocation;
}
@Override
public void onFailure(DJIError djiError) {
}
});
camera.setMode(SettingsDefinitions.CameraMode.MEDIA_DOWNLOAD, djiError -> {
if (djiError == null) {
handler.sendMessage(handler.obtainMessage(SHOW_PROGRESS_DIALOG, null));
handler.postDelayed(refreshListRunnable, 500);
}
});
}
}
下面先判断当前的存储模式是什么,一种是sd卡,一种是飞机内部存储,然后调用对应的方法就可以拿到数据了。
private Runnable refreshListRunnable = new Runnable() {
@Override
public void run() {
mediaManager.refreshFileListOfStorageLocation(mediaType, djiError -> {
if (djiError == null) {
if (mediaType == SettingsDefinitions.StorageLocation.SDCARD) {
mediaFiles = mediaManager.getSDCardFileListSnapshot();
} else if (mediaType == SettingsDefinitions.StorageLocation.INTERNAL_STORAGE) {
mediaFiles = mediaManager.getInternalStorageFileListSnapshot();
}
for (int i = mediaFiles.size() - 1; i >= 0; i--) {
final MediaFile media = mediaFiles.get(i);
MediaBean mediaBean = new MediaBean();
String fileName = media.getFileName();
int mediaType = media.getMediaType().value();
float durationInSeconds = media.getDurationInSeconds();
String dateCreated = media.getDateCreated();
mediaBean.setMedia(media);
mediaBean.setFileName(fileName);
mediaBean.setDateCreated(dateCreated);
mediaBean.setDurationInSeconds(durationInSeconds);
mediaBean.setMediaType(mediaType);
mediaList.add(mediaBean);
}
} else {
handler.sendMessage(handler.obtainMessage(HIDE_PROGRESS_DIALOG, null));
}
});
}
};
然后就可以对单独的mediafile进行下载操作了
currentMedia.fetchFileData(new File(path),
fileName, new DownloadListener<String>() {
@Override
public void onStart() {
}
@Override
public void onRateUpdate(long l, long l1, long l2) {
}
@Override
public void onRealtimeDataUpdate(byte[] bytes, long l, boolean b) {
}
@Override
public void onProgress(long total, long current) {
onProgressUpdateListener.onProgressUpdate(total, current, fileName, currentPosition);
}
@Override
public void onSuccess(String s) {
onProgressUpdateListener.onSuccess(fileName);
}
@Override
public void onFailure(final DJIError djiError) {
}
});