Skip to main content

相册功能实现教程

1.概述

在本教程中将以 Android SDK Demo 为例,讲述开发者在应用中该如何使用相册中的API,通过本教程文档,开发者将学习到如何从无人机中获取媒体(照片、视频)数据,以及对相册中的媒体数据进行下载、删除,获取媒体信息等功能。因为相册中涉及有照片和视频,所以本文档中提及的媒体即是照片和视频。

2 .准备工作

2.1 Android studio

​ 使用Andrid Studio 进行项目开发(因为SDK 暂时不支持Eclipse)

2.2 接入SDK

按照AUTEL Mobile SDK 接入文档说明,接入Autel SDK ,监听与无人机的链接,返回实现了BaseProduct接口的对象,再根据对象去调用对应的模块,本文档只针对相册进行说明

3.获取相册流程

在接入SDK的前提下,可通过SDK提供的监听方法,监听与无人接连接的接口,通过接口可获取相册模块的信息。

3.1 添加监听

在你应用的MainAcitivyt(可以在你需要的地方再加入监听)中设置对无人机连接的监听,返回BaseProduct,通过BaseProduct获取相册接口信息:

  Autel.setProductConnectListener(new ProductConnectListener() {
@Override
public void productConnected(BaseProduct product) {
//.....
/**
* 获取到的product,获取无人机信息的接口
*/
AutelAlbum album = product.getAlbum();
//....

}

3.2 .获取相册信息

获取到AutelAlbum之后,调用对应的接口方法,拿到相册的相关数据,例如:

//获取相册列表
product.getAlbum().getMedia(0, 10,
new CallbackWithOneParam<List<MediaInfo>>() {
@Override
public void onFailure(AutelError autelError) {
//获取失败
}

@Override
public void onSuccess(List<MediaInfo> mediaInfos) {
//获取成功
}
});

其中MediaInfo为单个媒体详细信息(文档末尾有详细说明

4.相册API接口介绍

4.1 获取相册列表

3.1.1.查询SD卡相册,可以指定查询开始的位置和结束的位置,最终通过监听接口返回MediaInfo 的List集合,接口如下:

 /**
* 获取相册列表
* @param var1 相册类型->ALL(0),VIDEO(1),PHOTO(2);
* @param var2 查询开始位置
* @param var3 查询结束位置
* @param var4 返回值监听接口
*/
void getMedia(AlbumType var1, int var2, int var3,
CallbackWithOneParam<List<MediaInfo>> var4);

/**
* 获取相册列表,重载方法,默认的相册查询类型是ALL(0)
*
* @param var1 查询开始位置
* @param var2 查询结束位置
* @param var3 返回值监听接口
*/
void getMedia(int var1, int var2,CallbackWithOneParam<List<MediaInfo>>
var3);
  1. 1.2.查询机载闪存相册,具体如下接口如下:
/**
* 从无人机闪存中获取相册信息
* @param var1 获取类型->ALL(0),VIDEO(1),PHOTO(2);
* @param var2 开始位置
* @param var3 结束位置
* @param var4 结果回调接口
*/
void getFMCMedia(AlbumType var1, int var2, int var3,
CallbackWithOneParam<List<MediaInfo>> var4);

/**
*从无人机闪存中获取相册信息
* @param var1 开始位置
* @param var2 结束位置
* @param var3 结果回调接口
*/
void getFMCMedia(int var1, int var2,
CallbackWithOneParam<List<MediaInfo>> var3);

4.2.下载相册数据

2.1. 通过AutelAlbum接口中的downloadPicture方法,可以将无人机中的相册(图片)下载到指定的路径,接口如下:

  /***
* 将无人机中的媒体下载到本地
* @param var1 相册在无人机中的存储位置,可通过MediaInfo中的
* getOriginalMedia()方法拿到
* @param var2 下载之后媒体存储的位置
*/
void downloadPicture(String var1, String var2);

4.3.下载相册中媒体缩略图

3.1.获取相册中指定媒体缩略图,具体接口方法如下:

     if (null == okHttpManager) {
okHttpManager = new OkHttpManager.Builder().build();
}

okHttpManager.download(mediaInfo.getLargeThumbnail(), "文件存储路径",
new ResponseCallBack<File>() {
@Override
public void onSuccess(File file) {
/**
* 下载成功
*/
}
@Override
public void onFailure(Throwable throwable) {
/**
* 下载失败
*/
}
});

4.4.获取媒体分辨率、帧率

4.1. 根据SD卡单个媒体信息(MediaInfo),可以获取该媒体的分辨率、帧率等信息,也可以根据本地的媒体文件,获取改媒体文件的帧率、分辨率,具体接口如下:

 /**
*从指定对象中获取视频分辨率
* @param var1 获取视频分辨率的对象
* @param var2 获取结果回调。VideoResolutionAndFps 分辨率信息
*/
void getVideoResolutionFromHttpHeader(MediaInfo var1,
CallbackWithOneParam<VideoResolutionAndFps> var2);

/**
*返回本地文件中包含的视频分辨率和相关每秒帧数(Fps
* @param var1 本地媒体文件
* @return 分辨率、帧率等信息
*/
VideoResolutionAndFps getVideoResolutionFromLocalFile(File var1);

4.2. 根据机载闪存单个媒体信息(MediaInfo),可以获取该媒体的分辨率、帧率等信息,其Api和SD卡获取媒体信息相似,具体Api如下:

  /**
*从指定对象中获取视频分辨率(机载闪存)
* @param var1 指定获取对象
* @param var2 回去结果回调
*/
void getFMCVideoResolutionFromHttpHeader(MediaInfo var1,
CallbackWithOneParam<VideoResolutionAndFps> var2);

4.5.删除媒体数据

5.1. 删除SD卡媒体数据,可以指定删除单个数据,也可以批量进行删除,最终通过CallbackWithOneParam接口回调被删除的数据。接口如下:

 /**
* 删除媒体数据(批量)
* @param var1 要删除的媒体列表,最大条数支持50条
* @param var2 从摄像机中删除媒体数据时的回调
*/
void deleteMedia(List<MediaInfo> var1,
CallbackWithOneParam<List<MediaInfo>> var2);

/**
*删除的媒体数据(指定单条)
* @param var1 删除的指定媒体数据
* @param var2 从摄像机中删除媒体数据时的回调
*/
void deleteMedia(MediaInfo var1,
CallbackWithOneParam<List<MediaInfo>> var2);

5.2.删除机载闪存中媒体数据,其中Api和SD卡删除媒体数据相似,具体如下:

 /**
* 删除无人机闪存中媒体数据(批量)
* @param var1 待删除媒体数据集合
* @param var2 删除回调
*/

void deleteFMCMedia(List<MediaInfo> var1,
CallbackWithOneParam<List<MediaInfo>> var2);

/**
* 删除无人机闪存中媒体数据(单个)
* @param var1 待删除的指定数据
* @param var2 删除回调
*/
void deleteFMCMedia(MediaInfo var1,
CallbackWithOneParam<List<MediaInfo>> var2);

5. 回调接口说明

​ 相册API接口中大多都是通过想接口的形式回调结果给到开发者, CallbackWithOneParam 接口继承了FailedCallback接口,接口中具体抽象方法如下:

FailedCallback接口:

  public interface FailedCallback {
/**
* 获取失败接口回调
* @param var1 错误信息 (返回错误码以及错误信息)
*/
void onFailure(AutelError var1);
}

CallbackWithOneParam 接口:

public interface CallbackWithOneParam<T> extends FailedCallback {
/**
*请求成功回调
* @param var1 查询返回数据
*/
void onSuccess(T var1);
}

6.接口详解

6.1 MediaInfo 接口详解

接口方法说明
getFileSize()获取媒体文件大小
getFileTimeString()获取文件的创建时间
getSmallThumbnail()获取媒体的小缩略图url
getLargeThumbnail()获取媒体的大缩略图url
getOriginalMedia()获取媒体Url
getVideoResolutionAndFps()获取视频分辨率和相关的每秒帧数(Fps)
getVideoEncodeFormat()获取媒体编码格式(只针对视频媒体)
getVideoPlayUrl()获取媒体播放Url(针对视频媒体)

6.2 VideoResolutionAndFps参数详解

参数说明
VideoResolution视频分辨率枚举类
VideoFps视频帧率枚举类
VideoEncodeFormat视频编码格式枚举