##大疆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 开发笔记(入门篇)相关推荐

  1. 大疆无人机M100的onboard sdk开发-激活(QT平台)

    1.这篇主要围绕osdk的M100激活进行展开,M100要进行OSDK开发,第一步就是现将设备激活,才能通过SDK对它进行控制: 一.硬件条件: 1.通过usb接口连接dji assistant,视频 ...

  2. Android大疆无人机对接声网sdk

    项目下gradle导入 implementation 'io.agora.rtc:agora-full-beta:4.0.0-beta.1' 版本根据自身修改 public class AgoraUt ...

  3. Android大疆无人机对接大牛直播sdk视频H.264码推流

    前期准备 1:app/src/main下建立JniLibs文件包 复制大牛工程的so包以及jar包 jar包右键导入项目出现'>' 2:java下建立com.daniulive.smartpub ...

  4. 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高位和低位 ...

  5. 20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信

    https://www.cnblogs.com/yangfengwu/p/11192594.html 自行调整页面 连接上以后主动发个数据 namespace TCPClient {public pa ...

  6. 3-ESP8266 SDK开发基础入门篇--点亮一个灯

    https://www.cnblogs.com/yangfengwu/p/11072834.html 所有的源码 https://gitee.com/yang456/Learn8266SDKDevel ...

  7. 10-ESP8266 SDK开发基础入门篇--上位机通过串口控制ESP8266灯亮灭

    https://www.cnblogs.com/yangfengwu/p/11087618.html 其实这一节就是对上三节的综合测试 https://www.cnblogs.com/yangfeng ...

  8. winform直接控制云台_大疆手机云台 DJI OM 4 正式发布:磁吸拍出吸引力

    2020 年 8 月 26日, DJI 大疆创新正式发布全新手机云台 DJI OM 4 ,首次突破性地采用了磁吸快拆设计,帮助用户在生活中"拍出吸引力".通过创新的磁吸设计.强大的 ...

  9. 【 持续更新 】Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 。

    [持续更新]Android开发笔记汇总篇,爬各种坑,敲高效代码,各种奇难杂症,有您要治的病 . 一.AndroidStudio 开发工具的那些事 . 问题 1: AndroidStudio2.2以上在 ...

最新文章

  1. 对象的继承关系在数据库中的实现方式和PowerDesigner设计
  2. 【Ubuntu-Tensorflow】TF1.0到TF1.2出现“Key LSTM/basic_lstm_cell/bias not found in checkpoin”问题
  3. 2021抖音电商达人生态报告
  4. 【教程】VsCode搭建Java开发环境
  5. Navicat 连接Oracle时提示oracle library is not loaded的问题解决
  6. Android 10 正式版本或将于 9 月 3 日推出
  7. 软工作业4:词频统计
  8. 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
  9. 什么是Linux,以及Linux发行版?(update20201118)
  10. archLinux安装记录
  11. S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析
  12. IP-guard项目实施前情况调查表
  13. Java学习之路——接口
  14. 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构
  15. 有一个数组,内放10个整数,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换。
  16. 雷蛇键盘鼠标 Ubuntu16.04安装驱动和调节背光模式
  17. [电脑运用及修理]2022年电脑配置推荐(台式1000-20000元预算清单)
  18. MyEclipse最新版-版本更新说明及下载 - MyEclipse官方中文网
  19. 英文SEO友情链接的购买规则
  20. QT + VS + C++ 《控件的创建与删除》

热门文章

  1. MySQL Timeout解析
  2. 距离向量路由环路解决的方法.
  3. php中的var_dump()方法的详细说明
  4. 使用SQL进行递归查询
  5. 【JavaScript】实现将从Excel中复制的数据粘贴到WEB页面Grid中
  6. oracle decode函数
  7. 就业模拟试题(.NET部分)
  8. 高并发设计方案二(秒杀架构)
  9. MySQL配置mycat读写分离:wrapper | Startup failed: Timed out waiting for signal from JVM.
  10. Git的fatal: Not a git repository (or any parent up to mount point /home)