精华内容
下载资源
问答
  • Hugo-Djigo-源码

    2021-03-30 21:05:27
    Hugo-Djigo
  • Djigo 4.1.3 - Auto FCC No Update and Firm Check ru route
  • <div><p>Enclosed a brief explanation of DJI Go app not staying on screen. <p>https://youtu.be/TgxjnEJDKMg</p><p>该提问来源于开源项目:o-gs/dji-firmware-tools</p></div>
  • As far as I can tell, DJI GO is connected and I can take off and use DJI GO to control my M600 Pro, but I get that error when launching dji_sdk sdk_manifold.launch.</p><p>该提问来源于开源项目:...
  • dji go boost.apk

    2020-08-02 12:48:41
    所支持的DJI设备 - Inspire 1 系列, Phantom 3系列 以及 Matrice 100 飞行平台。 - 灵眸手持云台与相机。 功能: - 实时摄像预览 - 动态地图视图 - 相机控制与设置 - 完善的媒体库管理功能 - 视频剪辑,快速制作航拍...
  • STATUS activateCallback,line 280: new device, please link DJIGO to your remote controller and try again </code></pre> <p>Thus, I cannot request control from RC to onboard computer <p>Would anyone of ...
  • 突破2.6以上版本限制,完整ios app。本人找人官方下载,可以爱思助手安装不用登录账号。
  • Allowed flight in DJI No Fly

    2021-01-04 18:30:56
    <div><p>Have you considered the possibility of attempting to remove DJI go no fly zone? I have a situation where I have legal permission to fly by control tower but DJI Go will not let me unless I ...
  • I was under the impression that the interface board handled the USB or DJI GO app firmware upgrade ability but whether or not the UBL1 or U-Boot is pre- or Post- DJI app upgrade it will not allow ...
  • 您将学习如何使用DJI Android UX SDK和DJI Android SDK轻松创建具有标准DJI Go UI和功能的功能齐全的mini-DJI Go应用。 要求 Android Studio 2.0以上 Android系统4.1+ 大疆安卓SDK 4.14.1 DJI Android UX SDK ...
  • dji-ios-frida-tweak-源码

    2021-04-28 15:43:49
    调整DJI GO 4 主要特征: 在所有设备上启用FCC,在受支持的设备上启用5.8(将国家/地区代码更改为美国) 启用32声道BOOST 禁用固件检查 强制频率为2.3G或2.5G 在DJI Mavic Pro和DJI Inspire 2上测试 安装方法 请...
  • I have also made both RTK and M210 firmware update using the remote controller and the DJI GO 4 App.  <h2>So here is my problem : How to do to make the M210 RTK available in Dji assistant 2 so i can...
  • But the DJI GO 4 app supports Tripod mode in Phantom 4. <p>Is there anything that has to be done to make tripod mode work in phantom 4 in the sample app?</p><p>该提问来源于开源项目:dji-sdk/...
  • 文章目录1.能不能外接图像采集卡2.几点注意事项3.补充 最近使用 DJI M600 pro做项目,...使用lightbrdige 2 的mini hdmi接口可以直接在显示器上显示带有OCR(可通过DJI GO关闭)的实时云台画面。但我们不希望直接在显示


    最近使用 DJI M600 pro做项目,开发地面站的过程中为了提高效率,想要直接利用lightbridge 2遥控器的内置图传将机载的云台相机图像实时地结合到自己开发的QT界面中。

    在网络上搜了很久都没有得到靠谱的回答,因此将自己的尝试记录下来,希望对大家有所帮助。

    1.能不能外接图像采集卡

    可以

    使用lightbrdige 2 的mini hdmi接口可以直接在显示器上显示带有OCR(可通过DJI GO关闭)的实时云台画面。但我们不希望直接在显示器上显示,而是希望能够在QT中采集到。

    大疆的说法是不支持外接图像采集卡,但可以通过推流直播的形式获取到图像,这种做法的缺点很明显,一是有较大延迟,二是要求具备4G或WIFI通信能力。

    经过几次尝试了以后,我们成功地利用一款USB2.0图像采集卡(某东搜同三维采集卡,最便宜那款)在VLC上获取到了图像,进而在QT中采集到了实时的云台画面。

    2.几点注意事项

    我们在测试过程中,一开始也并不能获得图像,最后我们在DJI go中将图像输出全部设置为EXT模式,同时关闭OCR显示,才成功在QT中获得图像。

    具体过程为:将遥控器mini hdmi接口通过hdmi连接线与采集卡相连,采集卡插入电脑USB端口,此时电脑设备管理中应该能够看见USB vedio设备,如若笔记本内置摄像头,则此捕获设备的USB vedio编号应该为1。按照上文所述在DJI GO APP中调整图像输出设置,在QT中打开对应设备即可获得图像。


    图1 DJI云台图像在QT界面中实时显示

    我们获得的图像如下图所示:

    3.补充

    我们只在前文提及的采集设备上进行了测试,但理论上只要能解析h.264或H.265编码的Hdmi输入采集卡都能完成采集。

    展开全文
  • 最近大疆官方推出了一款较之DJI GO 4 APP中的模拟器更加强大的模拟器,可是在官网下载安装后死活连接不上遥控器,本人用的时御 air的遥控器,也在模拟器支持的遥控器范围内,查看使用手册也没办法解决问题,怀疑是...

    最近大疆官方推出了一款较之DJI GO 4 APP中的模拟器更加强大的模拟器,可是在官网下载安装后死活连接不上遥控器,本人用的时御 air的遥控器,也在模拟器支持的遥控器范围内,查看使用手册也没办法解决问题,怀疑是驱动的问题,但是怎么也没解决,最后在查阅很多资料后得到解决,下面给有同样困扰的小伙伴们说下我是怎么解决的吧。
    其实很简单,打开你安装模拟器的安装目录,找到文件名为:dji_usb_5512_64_108的应用程序文件:
    在这里插入图片描述
    双击后,点击图中的“下一步”按钮进行安装在这里插入图片描述
    安装成功后如图所示:
    在这里插入图片描述
    然后重启你的遥控器,便可以愉快的进行模拟飞行了。
    在这里插入图片描述
    注:如果按以上步骤还是无法连接遥控器,可以检查你遥控器插入的USB端口是否为USB3.0 如果不是,需要更换至USB 3.0的USB接口才能使用。

    模拟器及文档官网下载地址:
    https://www.dji.com/cn/simulator/info?site=brandsite&from=insite_search#downloads

    展开全文
  • <p>I have a go file named as drone_control.go which controls dji tello drone with keyboard button clicks. When I try to execute this file using the command prompt it shows an error * exec: "stty": ...
  • 由于课题研究的需要,昨天再次把DJI Phantom 3A拿出来准备熟悉一下飞行操作,可是就在上电准备起飞的时候,DJI GO提示遥控器固件需要升级,没想到就升出问题来了。我是按照App提示的操作进行升级的,从原来的1.4.30+...

    由于课题研究的需要,昨天再次把DJI Phantom 3A拿出来准备熟悉一下飞行操作,可是就在上电准备起飞的时候,DJI GO提示遥控器固件需要升级,没想到就升出问题来了。

    我是按照App提示的操作进行升级的,从原来的1.4.30+升级到了1.9.0,App提示升级成功,需要重启,遥控器指示灯绿灯常亮,当我关闭电源后,就再也无法开启遥控器了。尝试和大疆客服联系,几个客服都没有作出有效的回答,只是告诉我寄给他们维修,非常不专业。课题任务紧迫,等不及返修了,只好上网查找找有没有解决办法,看到了这篇文章:点击打开链接,感慨自己怎么没有遇到这么负责的客服,虽然该文章的修复方法没有起到作用,但是为我修复自己的遥控器提供了很大的帮助。

    接下来是我自己的升级失败解决方法:

    1. 下载DJI GO 4 App(顺便提一下我用的是苹果手机,至于安卓手机能不能这样解决我就不是很清楚了);
    2. 同时按住C1+拍照键打开遥控器,遥控器指示浅绿色灯;
    3. 通过数据线连接手机,打开DJI GO 4 App,按住界面右上角三条杠一样的按钮大约4s,弹出遥控器固件升级框,选择1.6.0版本,点击下载,然后刷入固件;
    4. 刷入的过程中遥控器应该闪蓝灯,且有提示音,刷入操作进行一会儿过后遥控器指示灯就灭了,这时候再同时按下C1+拍照键开启遥控器,自动恢复刷入操作,直到刷入成功;
    5. 按正常操作关闭遥控器,再次开启遥控器,连接手机,打开DJI GO App(注意不是DJI GO 4),进入相机,模块自检提示要更新遥控器固件,再次更新即可。

    重新升级过后第一次打开可能会出现亮红灯且一直Di-Di响的情况,按照正常关机的操作关闭遥控器,重新打开后应该就可以正常使用了。

    展开全文
  • <div><p>` // something to prepare the autopilot newWaypointList.waypoint_list.push_back(waypoint1); newWaypointList.waypoint_list.push_back(waypoint2);...dji-sdk/Onboard-SDK-ROS</p></div>
  • <p>Go into ports and set UART one peripherals to DJI FPV HD VTX Go into receiver and set to serial and SBUS fast (after reboot this is not set and remote does not have effect) <h2>Expected behavior ...
  • 大疆文档(5)-Android教程-使用UX SDK

    千次阅读 热门讨论 2019-04-10 09:49:32
    在本教程中,您将学习如何使用DJI Android UX SDK和DJI Android SDK轻松创建功能齐全的mini-DJI Go app,具有标准的DJI Go UI和功能。在本教程结束时,您将拥有一个可用于显示相机FPV视图,检查飞机状态,拍摄照片,...

    本节全篇为大疆 Mobile SDK 安卓教程 部分,ios教程参见 IOS教程 .

    开始使用UX SDK

    在本教程中,您将学习如何使用DJI Android UX SDK和DJI Android SDK轻松创建功能齐全的mini-DJI Go app,具有标准的DJI Go UI和功能。在本教程结束时,您将拥有一个可用于显示相机FPV视图,检查飞机状态,拍摄照片,录制视频等功能的app。

    您可以从 Github Page 下载教程的最终示例项目。

    我们以Mavic Pro和Nexus 5为例进行演示。有关自定义iPhone设备布局的更多详细信息,请查看教程的Github示例项目。让我们开始吧!

    介绍

    DJI UX SDK是由UI元素组成的可视化SDK。它可以帮助您简化基于Android的DJI Mobile SDK应用程序的创建。与DJI Go类似的设计,UI元素允许您在应用程序和DJI应用程序之间创建一致的UX。

    此外,由于易于使用,UX SDK让您更专注于业务和应用程序逻辑。

    由于DJI UX SDK是构建在DJI Mobile SDK和VideoPreviewer之上的,所以在应用程序开发中需要将它们一起使用。

    关于DJI UX SDK的深入学习,请访问 UX SDK Introduction

    在中国进行应用激活和飞机绑定

    对于在中国使用的DJI SDK移动应用程序,需要激活应用程序并将飞机绑定到用户的DJI帐户。

    如果未激活应用程序,未绑定飞机(如果需要)或使用旧版SDK(<4.1),则将禁用所有** 摄像机实时流 **,并且飞行将限制为直径100米的区域和30米高度,以确保飞机保持在视线范围内。

    要了解如何实现此功能,请查看本教程 Application Activation and Aircraft Binding .

    导入DJI UX SDK

    • 创建新项目,名称为 “UXSDKDemo”
    • 输入域名和包名(这里我们使用 “com.dji.uxsdkdemo” )
    • 选择手机版,设置最低SDK版本为 API 19: Android 4.4 (KitKat)
    • 选择 “Empty Activity”
    • 其他默认

    配置 Gradle 脚本

    打开 “build.gradle(Module: app)” 并添加以下代码:

    apply plugin: 'com.android.application'
    
    android {
    
        ...
        defaultConfig {
            ...
        }
    
        ...
    
        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"
    
            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'
    
            exclude '/lib/armeabi-v7a/libChineseFontPkg.so'
            exclude 'META-INF/rxjava.properties'
        }
    }
    
    dependencies {
       ...
        //compile ('com.dji:dji-uxsdk:4.9')
        //provided ('com.dji:dji-sdk-provided:4.9')
        implementation 'com.dji:dji-uxsdk:4.9'
        compileOnly 'com.dji:dji-sdk-provided:4.9'
    }
    

    在上面的代码中,我们实现了以下功能:

    1. 添加 packagingOptions 以防程序出现意外崩溃。
    2. 添加 compileprovided (新版AS为 implementationcompileOnly)依赖用来导入最新的DJI Android UX SDK和SDK Maven依赖项。

    完成以上步骤后,点击 Sync Now 并等待Gradle Project 同步完成。

    双重检查Maven依赖

    在Android Studio菜单中选择 File->Project Structure ,打开 “Project Structure” 窗口。然后选择“app”模块并单击 Dependencies 选项卡。你应该看到最新的DJI Android UX SDK compile和sdk provided的依赖项已经导入。

    img

    使用UX SDK构建默认布局

    现在,让我们继续打开 “activity_main.xml” 文件,并用替换为以下代码:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:custom="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_blue"
        android:orientation="horizontal"
        tools:context=".MainActivity">
    
        <!-- Widget to see first person view (FPV) -->
        <dji.ux.widget.FPVWidget
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
        <dji.ux.widget.FPVOverlayWidget
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
        <dji.ux.workflow.CompassCalibratingWorkFlow
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
        <!-- Widgets in top status bar -->
        <LinearLayout
            android:id="@+id/signal"
            android:layout_width="match_parent"
            android:layout_height="25dp"
            android:background="@color/dark_gray"
            android:orientation="horizontal">
    
            <dji.ux.widget.PreFlightStatusWidget
                android:layout_width="238dp"
                android:layout_height="25dp"/>
    
            <dji.ux.widget.FlightModeWidget
                android:layout_width="103dp"
                android:layout_height="22dp"/>
    
            <dji.ux.widget.GPSSignalWidget
                android:layout_width="44dp"
                android:layout_height="22dp"/>
    
            <dji.ux.widget.VisionWidget
                android:layout_width="22dp"
                android:layout_height="22dp"/>
    
            <dji.ux.widget.RemoteControlSignalWidget
                android:layout_width="38dp"
                android:layout_height="22dp"/>
    
            <dji.ux.widget.VideoSignalWidget
                android:layout_width="38dp"
                android:layout_height="22dp"/>
    
            <dji.ux.widget.WiFiSignalWidget
                android:layout_width="22dp"
                android:layout_height="20dp"/>
    
            <dji.ux.widget.BatteryWidget
                android:layout_width="96dp"
                android:layout_height="22dp"
                custom:excludeView="singleVoltage"/>
    
            <dji.ux.widget.ConnectionWidget
                android:layout_marginTop="3dp"
                android:layout_width="18dp"
                android:layout_height="18dp"/>
        </LinearLayout>
    
    
        <LinearLayout
            android:id="@+id/camera"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/signal"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:background="@color/dark_gray"
            android:orientation="horizontal">
    
            <dji.ux.widget.AutoExposureLockWidget
                android:layout_width="30dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.FocusExposureSwitchWidget
                android:layout_width="30dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.FocusModeWidget
                android:layout_width="30dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.config.CameraConfigISOAndEIWidget
                android:layout_width="60dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.config.CameraConfigShutterWidget
                android:layout_width="60dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.config.CameraConfigApertureWidget
                android:layout_width="60dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.config.CameraConfigEVWidget
                android:layout_width="60dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.config.CameraConfigWBWidget
                android:layout_width="70dp"
                android:layout_height="30dp"/>
    
            <dji.ux.widget.config.CameraConfigStorageWidget
                android:layout_width="130dp"
                android:layout_height="30dp"/>
        </LinearLayout>
    
        <dji.ux.widget.ManualFocusWidget
            android:layout_below="@id/camera"
            android:layout_alignLeft="@id/camera"
            android:layout_marginLeft="25dp"
            android:layout_marginTop="5dp"
            android:layout_width="42dp"
            android:layout_height="218dp"
            tools:ignore="RtlHardcoded"/>
    
        <dji.ux.widget.RemainingFlightTimeWidget
            android:layout_alignParentTop="true"
            android:layout_marginTop="18dp"
            android:layout_width="match_parent"
            android:background="@color/transparent"
            android:layout_height="20dp"/>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal"
            android:padding="12dp">
    
            <dji.ux.widget.dashboard.DashboardWidget
                android:id="@+id/Compass"
                android:layout_width="405dp"
                android:layout_height="91dp"
                android:layout_marginRight="12dp"
                tools:ignore="RtlHardcoded"/>
    
        </LinearLayout>
    
    
        <!--Take off and return home buttons on left -->
        <LinearLayout
            android:layout_width="40dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginStart="12dp"
            android:orientation="vertical">
    
            <dji.ux.widget.TakeOffWidget
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginBottom="12dp"/>
    
            <dji.ux.widget.ReturnHomeWidget
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginTop="12dp"/>
        </LinearLayout>
    
    
        <dji.ux.widget.controls.CameraControlsWidget
            android:id="@+id/CameraCapturePanel"
            android:layout_alignParentRight="true"
            android:layout_below="@id/camera"
            android:layout_width="50dp"
            android:layout_height="213dp"
            tools:ignore="RtlHardcoded"/>
    
    
        <dji.ux.panel.CameraSettingExposurePanel
            android:layout_width="180dp"
            android:layout_below="@id/camera"
            android:layout_toLeftOf="@+id/CameraCapturePanel"
            android:background="@color/transparent"
            android:gravity="center"
            android:layout_height="263dp"
            android:visibility="invisible"
            tools:ignore="RtlHardcoded"/>
    
        <dji.ux.panel.CameraSettingAdvancedPanel
            android:layout_width="180dp"
            android:layout_height="263dp"
            android:layout_below="@id/camera"
            android:layout_toLeftOf="@+id/CameraCapturePanel"
            android:background="@color/transparent"
            android:gravity="center"
            android:visibility="invisible"
            tools:ignore="RtlHardcoded"/>
    
        <!-- Pre-flight checklist panel -->
        <dji.ux.panel.PreFlightCheckListPanel
            android:layout_width="400dp"
            android:layout_height="wrap_content"
            android:layout_below="@id/signal"
            custom:excludeItem="ESCStatus"
            android:visibility="gone"/>
    
    </RelativeLayout>
    

    在上面的xml文件中,我们实现了以下UI:

    1. 首先,我们添加 dji.ux.widget.FPVWidget and dji.ux.widget.FPVOverlayWidget 元素来显示第一人称视图(FPV)。

      img

    2. 接下来,在屏幕顶部,我们创建一个 LinearLayout 去组成顶部状态栏的小组件,如PreFlightStatusWidget, FlightModeWidget, GPSSignalWidget, RemoteControlSignalWidget

      img

    3. 此外,我们在状态栏下面创建另一个 LinearLayout 去组成相机配置和配置小组件的,如 AutoExposureLockWidget, FocusExposureSwitchWidget, CameraConfigISOWidget, CameraConfigStorageWidget 等。此外,我们添加 dji.ui.widget.RemainingFlightTimeWidget 元素,用来显示顶部状态栏小组件集下方的剩余飞行时间组件。

      img

    4. 在顶部状态栏下方,我们添加一个 RemainingFlightTimeWidget 用来显示剩余飞行时间。

    5. 在屏幕的底部,我们添加另一个 LinearLayout 来分组 DashboardWidget 。它包括圆形 CompassWidget (罗盘), DistanceHomeWidget (home距离), HorizontalVelocityWidget (水平速度), DistanceRCWidget (遥控器距离), VerticalVelocityWidget (垂直速度) and AltitudeWidget (高度) 如下所示:

      img

    6. 在屏幕的左侧,我们添加了一个 LinearLayoutTakeOffWidgetReturnHomeWidget 进行分组,将其显示为两个按钮。

      img

    7. 在屏幕右侧,我们添加 dji.ui.widget.controls.CameraControlsWidget 元素以创建一个 CameraSettingAdvancedPanel以显示相机控件组件。点击顶部的菜单按钮将触发 CameraSettingAdvancedPanel 。点击中间的切换按钮将在 拍照录像 之间切换相机模式。点击底部按钮将触发 CameraSettingExposurePanel 组件显示和隐藏。

      img

    8. 为了添加 CameraSettingExposurePanel ,我们添加 dji.ui.panel.CameraSettingExposurePanel 元素并配置其属性。

      img

    9. 为了添加CameraSettingAdvancedPanel,我们添加 dji.ui.panel.CameraSettingAdvancedPanel 元素并配置其属性。

      img

    10. 最后,我们添加 dji.ui.panel.PreFlightCheckListPanel 元素来创建 PreFlightCheckListPanel 。当用户按下时 PreFlightStatusWidget ,它将显示在顶部状态栏下方。

      img

    完成上述步骤后,打开 “colors.xml” 文件并替换以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="colorPrimary">#3F51B5</color>
        <color name="colorPrimaryDark">#303F9F</color>
        <color name="colorAccent">#FF4081</color>
        <color name="background_blue">#242d34</color>
        <color name="transparent">#00000000</color>
        <color name="dark_gray">#80000000</color>
    </resources>
    

    此外,让我们打开 “styles.xml” 文件并替换以下内容:

    <resources>
    
        <!-- Base application theme. -->
        <style name="AppTheme" parent="@style/Base.Theme.AppCompat.Light.NoActionBar">
        </style>
        
        <!-- by Android Stduio 3.3.2  -->
        <!--<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">-->
        <!--</style>-->
    
    </resources>
    

    在DJI UX SDK的帮助下,在您自己的应用程序中简单直接的实现了标准的DJI Go UI和功能。

    应用程序注册

    现在让我们使用您从DJI开发者网站申请的 App Key 注册我们的应用程序。如果您不熟悉App Key,请查看 Get Started

    实现MApplication和DemoApplication

    新建一个 “MApplication” 类,然后用以下代码替换:

    package com.dji.uxsdkdemo;
    
    import android.app.Application;
    import android.content.Context;
    
    import com.secneo.sdk.Helper;
    
    public class MApplication extends Application {
    
        private DemoApplication demoApplication;
        @Override
        protected void attachBaseContext(Context paramContext) {
            super.attachBaseContext(paramContext);
            Helper.install(MApplication.this);
            if (demoApplication == null) {
                demoApplication = new DemoApplication();
                demoApplication.setContext(this);
            }
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            demoApplication.onCreate();
        }
    }
    

    在这里,我们重写 attachBaseContext() 方法,然后添加 Helper.install(MApplication.this); ,此外, 重写 onCreate() 方法来调用 DemoApplication 类中的 onCreate() 方法。

    Note: 由于现在需要在使用之前加载一些SDK类,所以加载过程由 Helper.install() 完成。开发人员需要在使用任何SDK功能之前调用此方法。如果不这样做,将导致意外崩溃。

    完成上述步骤后,我们继续创建 DemoApplication 类,并在本教程的 sample project 中用同名文件替换代码,这里我们解释一下重要部分:

    @Override
        public void onCreate() {
            super.onCreate();
            mHandler = new Handler(Looper.getMainLooper());
    
            //Check the permissions before registering the application for android system 6.0 above.
            int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
            int permissionCheck2 = ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.READ_PHONE_STATE);
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (permissionCheck == 0 && permissionCheck2 == 0)) {
    
                //This is used to start SDK services and initiate SDK.
                DJISDKManager.getInstance().registerApp(getApplicationContext(), mDJISDKManagerCallback);
            } else {
                Toast.makeText(getApplicationContext(), "Please check if the permission is granted.", Toast.LENGTH_LONG).show();
            }
    
            /**
             * When starting SDK services, an instance of interface DJISDKManager.DJISDKManagerCallback will be used to listen to
             * the SDK Registration result and the product changing.
             */
            mDJISDKManagerCallback = new DJISDKManager.SDKManagerCallback() {
    
                //Listens to the SDK registration result
                @Override
                public void onRegister(DJIError error) {
                    if(error == DJISDKError.REGISTRATION_SUCCESS) {
                        DJISDKManager.getInstance().startConnectionToProduct();
                        Handler handler = new Handler(Looper.getMainLooper());
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(), "Register Success", Toast.LENGTH_LONG).show();
                            }
                        });
                        loginAccount();
    
                    } else {
                        Handler handler = new Handler(Looper.getMainLooper());
                        handler.post(new Runnable() {
    
                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(), "Register Failed, check network is available", Toast.LENGTH_LONG).show();
                            }
                        });
    
                    }
                    Log.e("TAG", error.toString());
                }
    
                @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) {
                    if (newComponent != null) {
                        newComponent.setComponentListener(new BaseComponent.ComponentListener() {
    
                            @Override
                            public void onConnectivityChange(boolean isConnected) {
                                Log.d("TAG", "onComponentConnectivityChanged: " + isConnected);
                                notifyStatusChange();
                            }
                        });
                    }
    
                    Log.d("TAG",
                            String.format("onComponentChange key:%s, oldComponent:%s, newComponent:%s",
                                    componentKey,
                                    oldComponent,
                                    newComponent));
    
                }
            };
        }
    

    我们在这里实现了几个功能:

    1. 我们重写了 onCreate() 方法,用来检查权限,并且调用了 DJISDKManagerregisterApp() 方法用来首先注册应用程序。
    2. 初始化 SDKManagerCallback变量,并实现了他的两个接口方法。你可以使用 onRegister() 方法去检查App注册状态和显示文本信息通知用户。当产品连接或者断开连接的时候,onProductConnect() and onProductDisconnect() 方法将被调用。此外,我们使用 onComponentChange() 方法去检查组件改变,并调用 notifyStatusChange() 方法去通知这次改变。

    创建 MApplication类后,请在 DemoApplication 类的 onCreate() 方法中初始化 DJI Android SDK 类变量,通过调用 Helper.install() 来完成SDK类的加载。

    更多详情,请查看本教程的github示例。

    修改AndroidManifest文件

    完成上述步骤后,我们打开 “AndroidManifest.xml” 文件,并在 application 元素上添加一下元素:

    <!-- DJI SDK need permission -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature
        android:name="android.hardware.usb.host"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.usb.accessory"
        android:required="true" />
    

    在这里,我们请求的应用程序必须被授权,以便它正确注册DJI SDK。此外,我们还声明了应用程序所使用的相机和USB硬件。

    此外,在 application 元素开头添加 android:name=".MApplication"

    <application
        android:name=".MApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    

    再然后,我们在 “MainActivity” activity 上面添加以下元素:

    <!-- DJI SDK -->
    <uses-library android:name="com.android.future.usb.accessory" />
    
    <meta-data
        android:name="com.dji.sdk.API_KEY"
        android:value="Please enter your App Key here." />
    
    <activity
        android:name="dji.sdk.sdkmanager.DJIAoaControllerActivity"
        android:theme="@android:style/Theme.Translucent">
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
        </intent-filter>
    
        <meta-data
            android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
            android:resource="@xml/accessory_filter" />
    </activity>
    
    <service android:name="dji.sdk.sdkmanager.DJIGlobalService"></service>
    <!-- DJI SDK -->
    

    在上面的代码中,你可以用你申请的 App Key 代替 value 属性中的 “Please enter your App Key here.” 。 至于 “accessory_filter.xml” 文件,你可以在教程示例程序中找到它(sdk4.9中已经有了,无需再次添加)。

    最后,更新 “MainActivity” activity 元素,如下所示:

    <activity android:name=".MainActivity"
        android:screenOrientation="landscape">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

    在以上代码中,多了一行强制横屏的代码。

    处理MainActivity

    最后,让我们打开 “MainActivity.java” 文件,替换如下代码:

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // When the compile and target version is higher than 22, please request the
            // following permissions at runtime to ensure the
            // SDK work well.
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.VIBRATE,
                                Manifest.permission.INTERNET, Manifest.permission.ACCESS_WIFI_STATE,
                                Manifest.permission.WAKE_LOCK, Manifest.permission.ACCESS_COARSE_LOCATION,
                                Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_FINE_LOCATION,
                                Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
                                Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SYSTEM_ALERT_WINDOW,
                                Manifest.permission.READ_PHONE_STATE,
                        }
                        , 1);
            }
    
            setContentView(R.layout.activity_main);
        }
    
    }
    

    onCreate() 方法中,我们在运行时请求几种权限来确保编译和目标SDK版本高于22时可以正常工作。(从Android 6.0 = API 23开始需要动态权限)

    现在,我们来构建和运行项目,并安装到你的Android设备上。如果一些ok,当你注册成功时,将会看到 “Register Success” 文本框。

    img

    连接到飞机并运行该项目

    现在,请检查这个连接移动设备并运行应用程序指南来运行应用程序,并根据我们目前完成的应用程序来试试UX SDK的mini-DJI Go特性!

    Connect Mobile Device and Run Application

    如果您能够看到实时视频提要并像这样测试这些特性,那么恭喜您!使用DJI UX SDK就是这么简单。

    img

    摘要

    在本教程中,您已经学习了如何使用DJI Android UX SDK和DJI Android SDK轻松创建一个功能齐全的mini-DJI Go app,具有典型的DJI Go ui和功能。希望你喜欢!

    展开全文
  • <p>If u go lower than 1.9 many different Problems appear. <p>Compass Problems are the main Problem. <p>After Downgrade to 1.8 all Compass values are at 0. <p>How can we Check whats the Problem. How ...
  • ve checked the logs and the motors seem to go to idle. Apparently we' still have a bit of yaw control while falling, but it's irrelevant because the drone is falling :) <p>We didn't manage...
  • 随后在大疆社区官方给出了解决方案,如下:关于DJI GO 4 APP闪退解决方案目前关于DJI GO4 APP闪退的问题,我们已定位到该问题产生的原因并进行修复,请按照以下解决方案进行APP/固件升级。【DJI GO 4 闪退解决方案】...
  • 注意事项 第一次使用 M100 时需要连接手机app DJI GO...第一次使用Onboard SDK激活/获取控制权时也需要连接手机app DJI GO ,手机需要联网,DJI GO 会提示你是否使用开发者 app id 和 app key 激活,选择确认。 根...
  • 大疆在手机端提供了软件DJI GO 4控制飞行参数等,其中包含自定义RTMP接口来向第三方推流进行直播业务,而我们可以利用这种直播的思路来完成画面传输。 环境 精灵Phantom 4 Pro V2.0 DJI GO 4(手机端) win10(PC...
  • 在eclipse中创建maven项目,运行pom.xml run as maven test System.getProperty("user.dir") 输出的目录却是E:\Workspace\djigo-master\target,为什么不是E:\Workspace\djigo-master\
  • <div><p>Creating separate issue for FCC set by Dji Go to avoid mixing subjects. <p>commented on Jul 3 <p><img alt="screenshot_20170702-175225" src=...
  • 参考资料: Hardware Setup Guide - ... 软件环境搭建2.1 github下载源码2.2 DJI PC Assistant 2软件2.3 DJI GO App3. 获取APP ID和密钥4. 启用OSDK5. STM32工具链6. 测试 1. 硬件连接 连接GND,TX,RX三线,VC...
  • 通过使用DJI GO 4 app或DJI无线跟焦器,即可远程调节X5S相机的焦点或光圈。使用DJI无线跟焦器可以免去线缆及电机的安装,直接通过DJI Lightbridge控制相机的光圈或焦点,控制距离远达7公里*。     云台介绍...
  • showToast "disconnected

    2020-12-09 01:24:15
    <div><p>Run this sample on Huawei Tablet connected to remote ...Running DJIGo on it works well.</p><p>该提问来源于开源项目:DJI-Mobile-SDK-Tutorials/Android-VideoStreamDecodingSample</p></div>

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 128
精华内容 51
关键字:

djigo