基于⼤疆⽆⼈机SDK⼆次开发
基于⼤疆⽆⼈机SDK⼆次开发
近期公司项⽬需求,需要基于⼤疆⽆⼈机SDK开发⼀款⼿机 APP,⽤于配合后台实现对⽆⼈机的管理。当然⼤疆本⾝也给我们提供了管理平台-----⼤疆司空。通过⼤疆的官⽅ APP 配合后台管理系统⼤疆司空,就可以实现对⽆⼈机的管理了。奈何⼤疆司空费⽤太⾼,进阶版需要1 年 19999 的费⽤。因此就需要⾃⼰开发⼿机APP,⽤于给后台传输⽆⼈机的有关信息。
下⾯就把开发过程中需要注意的⼀些地⽅总结整理⼀下,以免后⼈踩坑。
相关资料链接
下⾯把使⽤到的资料链接贴⼀下:
通过下载中⼼我们可以下载⽆⼈机的操作⼿册、快速⼊门⼿册还有不同的 app 版本,为我们开发提供便利的软件⼯具等等。
这⾥有很多 demo,不同的demo⽤于介绍不同的功能点,切记在开发的时候要以demo中的代码为准,不要以官⽅⽂档为准,按照官⽅⽂档你可能⽆法把程序跑起来。
在商城⾥你可以了解相关产品的特性,进⾏更好的开发
⽂档还是要看⼀下的,特别是对没有接触过⽆⼈机的新⼿来说。⽂档都是英⽂的,其实很容易看懂。实在不懂可以通过⾕歌浏览器的翻译功能,可以很好的把⽂档翻译成中⽂。建议原⽂和中⽂⼀起查看。
Api 可以作为在开发过程中的补充,对那个⽅法不了解,就直接到这⾥搜索就可以了,API 的搜索功能做的很强⼤,你只需要把不同的⽅法名或者类名输⼊就可以了。API ⾥⾯的解释相对来说还是⽐较详细的。
进⼊正⽂
⾸先想要开发⼤疆⽆⼈机 APP ,需要满⾜以下条件:
⾸先你要有⼀台⽆⼈机(需要这台⽆⼈机⽀持 SDK )
开发者账号
满⾜了上⾯的条件就可以开始进⾏开发了,和平时使⽤第三⽅ SDK ⼀样,你需要在开发者账号⾥⾯新建⼀个 APP,这⾥需要注意 APP 的包名必须和真实的 APP 包名⼀致否则运⾏不成功!
关于如何导⼊依赖,如何创建 APP 这些基本内容这⾥就不重复了,⽂档都⽤,需要注意的是⽂档⾥⾯的依赖不全,你需要做的就是,把demo 下载下来,然后把 demo 中的依赖全部复制到你的项⽬中
再说具体⼀些,⽂档中的这⾥是不全的,你需要在依赖中添加:
packagingOptions {
doNotStrip "*/*/libdjivideo.so"sdk
doNotStrip "*/*/libSDKRelativeJNI.so"
doNotStrip "*/*/libFlyForbid.so"
doNotStrip "*/*/libduml_vision_bokeh.so"
doNotStrip "*/*/libyuv2.so"
doNotStrip "*/*/libGroudStation.so"
doNotStrip "*/*/libFRCorkscrew.so"
doNotStrip "*/*/libUpgradeVerify.so"
doNotStrip "*/*/libFR.so"
doNotStrip "*/*/libDJIFlySafeCore.so"
doNotStrip "*/*/libdjifs_jni.so"
doNotStrip "*/*/libsfjni.so"
doNotStrip "*/*/libDJICommonJNI.so"
doNotStrip "*/*/libDJICSDKCommon.so"
doNotStrip "*/*/libDJIUpgradeCore.so"
doNotStrip "*/*/libDJIUpgradeJNI.so"
exclude 'META-INF/rxjava.properties'
}
来代替⽂档中写出的那⼏种
好了,依赖也引⼊成功了,下⾯就可以进⾏开发了。
这⾥就简单介绍⼀下sdk的使⽤步骤把,重点是接受需要特别注意地⽅。
⾸先你需要注册⼀下 sdk,在注册成功的回调⾥⾯再调登录
if (isRegistrationInProgresspareAndSet(false, true)) {
.registerApp(ApplicationContext(),
new DJISDKManager.SDKManagerCallback() {
@Override
public void onRegister(DJIError djiError) {
// 如果配置的包名和API_KEY没有问题那么这⾥就注册成功了
if (djiError == DJISDKError.REGISTRATION_SUCCESS) {
// 进⾏登录
loginAccount();
}
}
@Override
public void onProductDisconnect() {
Log.e(TAG, "onProductDisconnect");
notifyStatusChange();
}
@Override
public void onProductConnect(BaseProduct baseProduct) {
Log.e(TAG, String.format("onProductConnect newProduct:%s",
baseProduct));
notifyStatusChange();
}
@Override
public void onComponentChange(BaseProduct.ComponentKey componentKey,
BaseComponent oldComponent,
BaseComponent newComponent) {
}
@Override
public void onInitProcess(DJISDKInitEvent djisdkInitEvent, int i) {
}
@Override
public void onDatabaseDownloadProgress(long l, long l1) {
}
}));
}
上⾯的⼀步是 APP 开始所必须要经过的⼀步,否则你就⽆法操控⽆⼈机。
这⼀步需要注意的是:
上⾯的回调内容都不是在主线程,因此如果要操作界⾯内容,需要到主线程中操作
⾸次注册 SDK 和登录账户是需要⽹络⽀持的,之后就不需要⽹络了。
登录⼀定要在注册 SDK 成功后调⽤,否则加载不出登录界⾯
好了,上⾯步骤完毕后,就是等待⽆⼈机连接了,⽆⼈机连接的时候会触发回调,等连接上⽆⼈机我们就可以进⾏真正的开发了。
进⾏开发的时候主要就是利⽤了 SDK 中的⼏个类,它们的⽅法很好理解。
DJISDKManager
这个类⾮常关键,它是使⽤ SDK 和⼤疆⽆⼈机的⼊⼝。
注册 SDK、获取⽆⼈机对象都是通过这个类来实现的。
通过SJISDKManager获取到⽆⼈机对象(Aircraft)后,就可以利⽤Aircraft来获取⽆⼈机的各个组件对应的对象了,⽐如:飞控FlightController (这是⽆⼈机的核⼼组件,控制⽆⼈机的飞⾏,关于⽆⼈机的位置信息,状态信息等)、电池Battery、相机Camera、云台Gimbal、遥控
器RemoteController等等。详见 COMPONENT CLASSES
同时我们还可以引⼊UX SDK来帮助我们进⾏快速的开发。
UX SDK 主要是提供了⼀些线程的控件,这些控件我们放到 UI 中就可以使⽤,⽽且不是静态的 UI ,是有数据的,不需要我们进⾏任何处理。
⽐如:dji.ux.widget.FPVWidget组件,你只需要放到布局中,就可以显⽰⽆⼈机相机的画⾯。
注意内容
进⾏直播:
if (!Instance().getLiveStreamManager().isStreaming()) {
new Thread() {
@Override
public void run() {
.getSecondaryVideoFeed(),
true);
"rtmp:///x");
.setVideoEncodingEnabled(true);
int result =
.startStream();
L.e("startLive:" + result + Instance()
.getLiveStreamManager().isStreaming() +
"\n isVideoStreamSpeedConfigurable:" + DJISDKManager
.getInstance().getLiveStreamManager()
.
isVideoStreamSpeedConfigurable() +
"\n isLiveAudioEnabled:" + Instance()
.getLiveStreamManager().isLiveAudioEnabled());
}
}.start();
}
单纯的setLiveUrl()然后开始直播是不会成功的,需要有前⾯⼀步注册直播视频,代码中的fpv就是dji.ux.widget.FPVWidget控件。
获取⽆⼈机位置的⽅法
// 主动获取
Aircraft aircraft1 = (Aircraft) Instance().getProduct();
FlightControllerState state = FlightController().getState();
L.e("==altitude:" + AircraftLocation().getAltitude() + "latitude:" + AircraftLocation().getLatitude() + "longitude:");
// 当然你可以注册回调函数
void setStateCallback(@Nullable FlightControllerState.Callback callback);
布局名字坑
布局中不要出现dialog_login的名字,因为这个名字在⼤疆的 SDK 中已经有了,当你在添加⼀个dialog_login名字的时候,调⽤登录 API 就会报空指针错误了。
如果出现莫名其妙的布局空指针异常,很有可能是我们⾃⼰的布局和⼤疆 SDK 中的布局名字重复了。
回调⼤多不在主线程
⼤疆 SDK 中的回调⼤多数都不是在主线程这⼀点需要注意
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论