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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

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

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

#1.文檔相關(guān)

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

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

4.官方Git庫
相關(guān)Demo都在里面

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


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

6.Mobile-UXSDK-Android 結(jié)合的Demo(飛控界面)
地址下載

#2.飛行模擬器下載地址

#3.Android SDK

預(yù)覽大圖 #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添加權(quán)限

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初始化以及接口相關(guān) *注:DJI的相關(guān)回調(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 注冊成功 啟動(dòng)連接到飛機(jī) 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) { //登錄失敗的錯(cuò)誤回調(diào) } }); }

###6.3獲取登錄DJI賬號相關(guān)的信息 private void getDjiLoginUserName() { UserAccountManager.getInstance().getLoggedInDJIUserAccountName(new CommonCallbacks.CompletionCallbackWith() { @Override public void onSuccess(final String s) { //s為登錄的用戶名 }

@Override

public void onFailure(final DJIError djiError) {

//獲取失敗 錯(cuò)誤詳情請查看djierror類

}

});

}

*注:完成以上的注冊SDK、和登錄用戶名后,就能進(jìn)入到正式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
這個(gè)控件用戶顯示飛控的相機(jī)的畫面,DJI已經(jīng)綁定,直接用即可。
custom:sourceCameraNameVisibility="false"
此屬性用設(shè)置 畫面中間不顯示視頻來源的名稱。

這個(gè)控件用于在畫面中操作相機(jī)的移動(dòng)等。

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

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

//設(shè)置監(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();//飛機(jī)的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)容還不錯(cuò),歡迎將生活随笔推薦給好友。