日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android大疆飞控界面,DJI Android SDK 开发笔记(入门篇)

發(fā)布時間:2024/9/19 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android大疆飞控界面,DJI Android SDK 开发笔记(入门篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

##大疆SDK開發(fā)筆記##

#1.文檔相關

2.Android SDK文檔
接入Android的SDK都在這部分,飛控相關的接口。

3.Android UX SDK文檔
大疆自定義的組件,已經(jīng)跟飛機關聯(lián),直接用即可。

4.官方Git庫
相關Demo都在里面

5.注冊成為開發(fā)者


[開發(fā)者注冊](https://account.dji.com/register?appId=dji_sdk&backUrl=https%3A%2F%2Fdeveloper.dji.com%2Fuser&locale=en_US)
注:每一個Android應用都要注冊APPkey,否則調(diào)用不了SDK。

6.Mobile-UXSDK-Android 結(jié)合的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的相關回調(diào)都在子線程里面!請勿在操作UI。

###6.1初始化SDK DJISDKManager.getInstance().registerApp(MainActivity.this.getApplicationContext(), new DJISDKManager.SDKManagerCallback() { @Override public void onRegister(DJIError djiError) { //子線程的回調(diào) 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 連接發(fā)生改變

if (newComponent != null) {

newComponent.setComponentListener(new BaseComponent.ComponentListener() {

@Override

public void onConnectivityChange(boolean isConnected) {

Log.d(TAG, "onComponentConnectivityChanged: " + isConnected);

//DJI SDK 連接發(fā)生改變

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) { //登錄成功的回調(diào) 子線程回調(diào) } @Override public void onFailure(final DJIError djiError) { //登錄失敗的錯誤回調(diào) } }); }

###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開發(fā)了。

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已經(jīng)綁定,直接用即可。
custom:sourceCameraNameVisibility="false"
此屬性用設置 畫面中間不顯示視頻來源的名稱。

這個控件用于在畫面中操作相機的移動等。

6.5獲取無人機的飛行狀態(tài)

*注:只有在SDK與與無人機連接成功,并且飛行的時候 才能有相應的高度經(jīng)緯度信息。

//設置監(jiān)聽

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("經(jīng)度:" + locationCoordinate3D.getLongitude()).append("\n");

stringBuffer.append("緯度:" + locationCoordinate3D.getLatitude()).append("\n");

stringBuffer.append("高度:" + locationCoordinate3D.getAltitude()).append(" m\n");

//tv_feiji_infos.setText(stringBuffer.toString());

}

##未完待續(xù)..

總結(jié)

以上是生活随笔為你收集整理的android大疆飞控界面,DJI Android SDK 开发笔记(入门篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜偷拍福利视频 | 亚洲国产欧美精品 | 成年女人18级毛片毛片免费 | 亚洲日批视频 | 国产精品96 | 一级影片在线观看 | 天天天天天天天天干 | 中出 在线 | 国产污视频| 亚洲成人av | 激情国产一区 | 久久久久久国产精品 | 国产一区二区免费 | 香蕉视频链接 | 国产精品久久午夜夜伦鲁鲁 | 欧美影音 | 日韩电影一区二区三区四区 | 亚洲综合不卡 | 69精品人人人人 | 一级片黑人 | 亚洲精品视频在线播放 | 久久嫩草精品久久久久 | 国产精品美女在线观看 | 亚洲永久网站 | 亚洲一区二区自拍 | 在线国产日韩 | 亚洲美女av在线 | 美女网站免费视频 | 桃色一区二区三区 | 国产成人精品无码免费看81 | 污污视频网站在线 | 久久福利免费视频 | 久久艹这里只有精品 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产精品第五页 | 91美女高潮出水 | 超碰97在线免费观看 | 色综合精品 | 久草青青草| 色爱av综合网 | 男女污网站 | 日韩一区二区欧美 | 五月激情六月婷婷 | 亚洲女人18毛片水真多 | 日韩欧美亚洲一区二区 | 麻豆网站在线播放 | 嫩模一区 | 精品国产一区在线 | 2025韩国大尺度电影 | 中文字幕亚洲无线码在线一区 | 成人靠逼视频 | 懂色av一区二区三区四区五区 | 亚洲欧美日韩在线看 | 上海贵妇尝试黑人洋吊 | 中文字幕在线日亚洲9 | 欧美黑人一区二区 | 在线天堂视频 | 美女免费视频网站 | 国产 福利 在线 | 91精品影视 | 看国产一级片 | 久久伊人成人网 | 一本色道久久综合狠狠躁的推荐 | 国产又粗又猛又黄又爽的视频 | 成人av免费网址 | 丰满尤物白嫩啪啪少妇 | 播放男人添女人下边视频 | 男女一进一出视频 | 欧美激情综合 | 骚虎av| 海角官网 | xxxxxx欧美| 成人激情视频在线播放 | 日韩精品成人免费观看视频 | 成人毛片软件 | 东京热无码av一区二区 | 四虎免费观看 | 中文字幕一区二区三区免费 | 亚洲视频在线观看一区二区三区 | 特黄在线 | 无遮挡裸光屁屁打屁股男男 | 99综合网| 久久人人爽爽 | 欧美大色网 | 一级黄色免费看 | 三级av免费| 国产精品啪啪啪视频 | 人妻少妇偷人精品久久性色 | 欧美图片一区 | 黄色一级视频免费看 | 久久久久久久久久免费视频 | 不卡视频在线播放 | 老鸭窝av在线 | 亚洲免费影院 | 日本韩国中文字幕 | 爱啪啪av | av在线一| 天堂av资源 | 日本人妻丰满熟妇久久久久久 |