Android Mobile SDK开发流程指引
1. 概述
Mobile SDK是⼀款软件开发套件,旨在让开发者能够访问⽆⼈机的丰富功能。SDK通过把更底层的功能封装成简单易⽤的API,简化了应⽤程序开发的过程。开发者接入SDK,可以获取到无人机对外提供的接口,从而可以拿到飞行器的相册、电池、相机、图传、任务等等信息。
2. 准备工作
2.1. Android开发环境
AndroidStudio开发环境(目前暂时不支持Eclipse)
2.2. 注册成为开发者
在 Autel开发者平台 注册成为开发者,创建应用,为创建的应用申请唯一APP KEY,初始化SDK需要用到。一个应用对应一个APP KEY。
2.3. 示例
开发者可以通过sdk示例代码,快速了解到SDK所提供的API接口。
3. SDK 接入流程
3.1. 添加依赖
在Autel开发者平台上选择"Downloads",会列出Android和iOS平台的Mobile SDK的最新软件开发包,下载对应平台开发包,导入工程,本地依赖,即可使用Autel SDK 进行开发。
NOTE: 本依赖示例是将下载的SDK 开发包放在了新建的目录release下,开发者可根据自己的实际情况修改SDK 本地依赖路径
3.2. 初始化SDK
自定义Application,在Application中添加AUTEL SDK 的初始化:
String appKey = "<SDK license should be input>";
AutelSdkConfig config = new AutelSdkConfig.AutelSdkConfigBuilder()
.setAppKey(appKey)
.setPostOnUi(true)
.create();
Autel.init(this, config, new CallbackWithNoParam() {
@Override
public void onSuccess() {
Log.v(TAG, "checkAppKeyValidate onSuccess");
}
@Override
public void onFailure(AutelError error) {
Log.v(TAG, "checkAppKeyValidate " + error.getDescription());
}
});
说明:因为Autel.init()为全局SDK配置,建议使用Application作为其Context参数传入,避免使用Activity导致内存泄漏。
NOTE: 在整个应用结束Autel SDK服务的使用后(一般在退出APP时),调用 Autel.destroy()来结束Autel SDK相关资源的调用
3.3. 手机USB插拔监听
手机USB插入遥控器,手机需要接收到USB相关广播,启动应用
自定义广播接受者继承自BroadcastReceiver,在manifest中注册 自定义广播接受者:
public class UsbBroadCastReceiver extends BroadcastReceiver {
final String TAG = getClass().getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
/**
* 监听由USB连接到设备的广播
*/
}
}
在AndroidManifest中添加注册:
<receiver android:name=".UsbBroadCastReceiver">
<intent-filter>
<action android:name=
"com.autel.sdk.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data android:name=
"android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</receiver>
NOTE:注册广播接收者,使用透明Activity接受广播
3.4. SDK Api接口介绍
SDK提供以下模块的功能服务:Album(相册)、Battery(电池)、Camera(相机)、DSP(图传)、FlyController(飞行控制器)、Gimbal(云台)、Mission(任务)、RemoteController(遥控器)、Codec(视频解码)
开发者通过与产品连接的监听回调,获取到BaseProduct接口,从而获取相关模块的接口(以下为各个模块的接口获取,详细的各个接口用法可以参考对应模块提供的api文档):
Autel.setProductConnectListener(
new ProductConnectListener() {
@Override
public void productConnected(
BaseProduct product) {
//.....
/**
* 获取到的product ,即飞行器对外提供的各个模块的接口方法
*/
//....
}
获取飞行器对外提供的接口,从而可以获取相关产品的模块接口,例如:
....
BaseProduct product;
...
switch (product.getType()) {
case EVO_2:
...
//相册
AutelAlbum autelAlbum = product.getAlbum();
//DSP
EvoDsp dsp = ((Evo2Aircraft) product).getDsp();
//相机
AutelCameraManager autelCameraManager
= product.getCameraManager();
//任务
MissionManager missionManager = product.getMissionManager();
//遥控器
AutelRemoteController remoteController
=product.getRemoteController();
//飞控
Evo2FlyController flyController
=((Evo2Aircraft) product).getFlyController();
//云台
EvoGimbal evoGimbal = ((Evo2Aircraft)product).getGimbal();
//电池
EvoBattery battery = ((Evo2Aircraft) product).getBattery();
//视频解码
AutelCodec codec = product.getCodec();
....
break;
}
4.结束
通过接口回调获取到BaseProduct,就可以通过BaseProduct去后去飞行器的各个模块,详情可参考各模块接口文档说明