android大疆飞控界面,DJI Android SDK 开发笔记(入门篇)
##大疆SDK开发笔记##
#1.文档相关
2.Android SDK文档
接入Android的SDK都在这部分,飞控相关的接口。
3.Android UX SDK文档
大疆自定义的组件,已经跟飞机关联,直接用即可。
4.官方Git库
相关Demo都在里面
5.注册成为开发者
[开发者注册](https://account.dji.com/register?appId=dji_sdk&backUrl=https%3A%2F%2Fdeveloper.dji.com%2Fuser&locale=en_US)
注:每一个Android应用都要注册APPkey,否则调用不了SDK。
6.Mobile-UXSDK-Android 结合的Demo(飞控界面)
地址下载
#2.飞行模拟器下载地址
#3.Android SDK
预览大图 #4.Android UX SDK
#5.Android Studio接入DIJ SDK步骤
5.1.app的build.gradle添加
implementation 'com.dji:dji-sdk:4.10'
implementation 'com.dji:dji-uxsdk:4.10'
compileOnly 'com.dji:dji-sdk-provided:4.10'
5.2.app的build.gradle的android中
packagingOptions {
doNotStrip "*/*/libdjivideo.so"
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"
pickFirst 'lib/*/libstlport_shared.so'
pickFirst 'lib/*/libRoadLineRebuildAPI.so'
pickFirst 'lib/*/libGNaviUtils.so'
pickFirst 'lib/*/libGNaviMapex.so'
pickFirst 'lib/*/libGNaviData.so'
pickFirst 'lib/*/libGNaviMap.so'
pickFirst 'lib/*/libGNaviSearch.so'
pickFirst 'lib/*/libDJIFlySafeCore.so'
pickFirst 'lib/*/libdjifs_jni.so'
pickFirst 'lib/*/libsfjni.so'
exclude 'META-INF/rxjava.properties'
}
5.3 AndroidManifest.xml添加权限
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
android:name="android.hardware.usb.host"
android:required="false" />
android:name="android.hardware.usb.accessory"
android:required="true" />
application里面
android:name="com.dji.sdk.API_KEY"
android:value="9a13028ed03500ad035980f9" />
android:name="dji.sdk.sdkmanager.DJIAoaControllerActivity"
android:theme="@android:style/Theme.Translucent">
android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
#6.SDK初始化以及接口相关 *注:DJI的相关回调都在子线程里面!请勿在操作UI。
###6.1初始化SDK DJISDKManager.getInstance().registerApp(MainActivity.this.getApplicationContext(), new DJISDKManager.SDKManagerCallback() { @Override public void onRegister(DJIError djiError) { //子线程的回调 if (djiError == DJISDKError.REGISTRATION_SUCCESS) { //SDK 注册成功 启动连接到飞机 DJISDKManager.getInstance().startConnectionToProduct(); } else { //SDK 注册失败 需要在子线程操作UI } Log.v(TAG, djiError.getDescription()); }
@Override
public void onProductDisconnect() {
Log.d(TAG, "onProductDisconnect");
notifyStatusChange();
}
@Override
public void onProductConnect(BaseProduct baseProduct) {
Log.d(TAG, String.format("onProductConnect newProduct:%s", baseProduct));
notifyStatusChange();
}
@Override
public void onComponentChange(BaseProduct.ComponentKey componentKey, BaseComponent oldComponent,
BaseComponent newComponent) {
//DJI SDK 连接发生改变
if (newComponent != null) {
newComponent.setComponentListener(new BaseComponent.ComponentListener() {
@Override
public void onConnectivityChange(boolean isConnected) {
Log.d(TAG, "onComponentConnectivityChanged: " + isConnected);
//DJI SDK 连接发生改变
notifyStatusChange();
}
});
}
Log.d(TAG, String.format("onComponentChange key:%s, oldComponent:%s, newComponent:%s",
componentKey,
oldComponent,
newComponent));
}
@Override
public void onInitProcess(DJISDKInitEvent djisdkInitEvent, int i) {
}
});
private void notifyStatusChange() {
if (mHandler == null) {
mHandler = new Handler(getMainLooper());
}
mHandler.removeCallbacks(updateRunnable);
mHandler.postDelayed(updateRunnable, 500);
}
###6.2登录DJI账号 private void DJIUserLogin() { UserAccountManager.getInstance().logIntoDJIUserAccount(MainActivity.this, new CommonCallbacks.CompletionCallbackWith() { @Override public void onSuccess(final UserAccountState userAccountState) { //登录成功的回调 子线程回调 } @Override public void onFailure(final DJIError djiError) { //登录失败的错误回调 } }); }
###6.3获取登录DJI账号相关的信息 private void getDjiLoginUserName() { UserAccountManager.getInstance().getLoggedInDJIUserAccountName(new CommonCallbacks.CompletionCallbackWith() { @Override public void onSuccess(final String s) { //s为登录的用户名 }
@Override
public void onFailure(final DJIError djiError) {
//获取失败 错误详情请查看djierror类
}
});
}
*注:完成以上的注册SDK、和登录用户名后,就能进入到正式DJI SDK开发了。
6.4 XML布局文件
android:id="@+id/fpvwidget"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
custom:sourceCameraNameVisibility="false" />
android:id="@+id/fPVOverlayWidget"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
dji.ux.widget.FPVWidget
这个控件用户显示飞控的相机的画面,DJI已经绑定,直接用即可。
custom:sourceCameraNameVisibility="false"
此属性用设置 画面中间不显示视频来源的名称。
这个控件用于在画面中操作相机的移动等。
6.5获取无人机的飞行状态
*注:只有在SDK与与无人机连接成功,并且飞行的时候 才能有相应的高度经纬度信息。
//设置监听
MApplication.getAircraftInstance().getFlightController().setStateCallback(new FlightControllerState.Callback() {
@Override
public void onUpdate(@NonNull final FlightControllerState flightControllerState) {
runOnUiThread(new Runnable() {
@Override
public void run() {
OnUpdateDJIView(flightControllerState);
}
});
}
});
private void OnUpdateDJIView(FlightControllerState flightControllerState) {
LocationCoordinate3D locationCoordinate3D = flightControllerState.getAircraftLocation();//飞机的3D位置
if (locationCoordinate3D == null) {
printLOG("locationCoordinate3D==null");
return;
}
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("经度:" + locationCoordinate3D.getLongitude()).append("\n");
stringBuffer.append("纬度:" + locationCoordinate3D.getLatitude()).append("\n");
stringBuffer.append("高度:" + locationCoordinate3D.getAltitude()).append(" m\n");
//tv_feiji_infos.setText(stringBuffer.toString());
}
##未完待续..
android大疆飞控界面,DJI Android SDK 开发笔记(入门篇)相关推荐
- 大疆无人机M100的onboard sdk开发-激活(QT平台)
1.这篇主要围绕osdk的M100激活进行展开,M100要进行OSDK开发,第一步就是现将设备激活,才能通过SDK对它进行控制: 一.硬件条件: 1.通过usb接口连接dji assistant,视频 ...
- Android大疆无人机对接声网sdk
项目下gradle导入 implementation 'io.agora.rtc:agora-full-beta:4.0.0-beta.1' 版本根据自身修改 public class AgoraUt ...
- Android大疆无人机对接大牛直播sdk视频H.264码推流
前期准备 1:app/src/main下建立JniLibs文件包 复制大牛工程的so包以及jar包 jar包右键导入项目出现'>' 2:java下建立com.daniulive.smartpub ...
- 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED
https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮 F1 4C为CRC高位和低位 ...
- 20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信
https://www.cnblogs.com/yangfengwu/p/11192594.html 自行调整页面 连接上以后主动发个数据 namespace TCPClient {public pa ...
- 3-ESP8266 SDK开发基础入门篇--点亮一个灯
https://www.cnblogs.com/yangfengwu/p/11072834.html 所有的源码 https://gitee.com/yang456/Learn8266SDKDevel ...
- 10-ESP8266 SDK开发基础入门篇--上位机通过串口控制ESP8266灯亮灭
https://www.cnblogs.com/yangfengwu/p/11087618.html 其实这一节就是对上三节的综合测试 https://www.cnblogs.com/yangfeng ...
- winform直接控制云台_大疆手机云台 DJI OM 4 正式发布:磁吸拍出吸引力
2020 年 8 月 26日, DJI 大疆创新正式发布全新手机云台 DJI OM 4 ,首次突破性地采用了磁吸快拆设计,帮助用户在生活中"拍出吸引力".通过创新的磁吸设计.强大的 ...
- 【 持续更新 】Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 。
[持续更新]Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 . 一.AndroidStudio 开发工具的那些事 . 问题 1: AndroidStudio2.2以上在 ...
最新文章
- 对象的继承关系在数据库中的实现方式和PowerDesigner设计
- 【Ubuntu-Tensorflow】TF1.0到TF1.2出现“Key LSTM/basic_lstm_cell/bias not found in checkpoin”问题
- 2021抖音电商达人生态报告
- 【教程】VsCode搭建Java开发环境
- Navicat 连接Oracle时提示oracle library is not loaded的问题解决
- Android 10 正式版本或将于 9 月 3 日推出
- 软工作业4:词频统计
- 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
- 什么是Linux,以及Linux发行版?(update20201118)
- archLinux安装记录
- S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析
- IP-guard项目实施前情况调查表
- Java学习之路——接口
- 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构
- 有一个数组,内放10个整数,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换。
- 雷蛇键盘鼠标 Ubuntu16.04安装驱动和调节背光模式
- [电脑运用及修理]2022年电脑配置推荐(台式1000-20000元预算清单)
- MyEclipse最新版-版本更新说明及下载 - MyEclipse官方中文网
- 英文SEO友情链接的购买规则
- QT + VS + C++ 《控件的创建与删除》
热门文章
- MySQL Timeout解析
- 距离向量路由环路解决的方法.
- php中的var_dump()方法的详细说明
- 使用SQL进行递归查询
- 【JavaScript】实现将从Excel中复制的数据粘贴到WEB页面Grid中
- oracle decode函数
- 就业模拟试题(.NET部分)
- 高并发设计方案二(秒杀架构)
- MySQL配置mycat读写分离:wrapper | Startup failed: Timed out waiting for signal from JVM.
- Git的fatal: Not a git repository (or any parent up to mount point /home)