购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1.2 注册应用程序与连接无人机

本节将介绍通过Android Mobile SDK注册应用程序和连接无人机的方法。

1. 注册应用程序

首先介绍通过SDK管理器的registerApp(…)方法注册应用程序,以获得使用Mobile SDK的授权的方法。在使用该方法时,还需要实现registerApp(…)方法的SDK管理器回调(SDKManagerCallback),以判断应用程序是否注册成功。

SDK管理器回调共包括以下几个回调函数。

● onRegister(DJIError djiError):注册应用程序回调方法。通过djiError变量回调注册信息。当djiError对象为空时,则说明注册成功;当djiError对象不为空时,该对象包含了注册错误的相关说明。

● onProductConnect(BaseProduct baseProduct):无人机连接回调方法。当移动设备连接到无人机时回调该函数,其中baseProduct即为连接的大疆产品对象。

● onProductDisconnect():无人机失去连接回调方法。当移动设备与无人机断开连接时回调该函数。注意,此处的无人机失去连接不是指无人机与遥控器之间的信号丢失,而是指移动设备与遥控器断开连接。

● onProductChanged(BaseProduct baseProduct):无人机连接变化回调方法。当移动设备所连接的无人机发生变化时回调,其中baseProduct即为变化后的无人机对象。

● onComponentChange(BaseProduct.ComponentKey componentKey, BaseComponent oldCom ponent, BaseComponent newComponent):无人机组件变化回调方法。该回调函数包括3个参数,即组件键(componentKey)、变化前组件对象(oldComponent)和变化后组件对象(newComponent)。组件键用于声明组件类型,为枚举类型变量,包括相机(CAMERA)、云台(GIMBAL)、飞行控制器(FLIGHTCONTROLLER)等类型。

● onInitProcess(DJISDKInitEvent djisdkInitEvent, int process):初始化进程回调方法。在注册应用程序时实际上也在进行Mobile SDK的初始化,包括资源初始化、限飞数据库初始化等。通过djisdkInitEvent对象的getInitializationState()方法即可获取初始化状态InitializationState。InitializationState为一枚举变量,包括在开始初始化时(STARTTOINITIALIZE)、资源加载完成时(ASSETSLOADED)和限飞数据库加___载完成(DATABASELOADED_)三个状态定义。另外,通过process变量可获得初始化进度,其值域为[0,100]。

● onDatabaseDownloadProgress(long process, long sum):限飞数据库下载进度回调方法。当在Gradle依赖中使用了“exclude module: 'fly-safe-database'”语句时,应用程序内部不包括限飞数据库,则需要在第一次初始化应用程序时下载完整的数据库。当现有的限飞数据库过时时,也需要下载最新的数据库。该方法的process参数为已经下载的字节数,而sum参数为限飞数据库总共的字节数。在限飞数据库全部下载完成后,才会在上述的onInitProcess(…)方法中回调ASSETSLOADED_类型的djisdkInitEvent对象。

另外,registerApp(…)方法必须要使用异步调用,不能在主线程中直接使用,例如,可以通过在界面中增加一个按钮,然后在其单击事件监听器中使用registerApp(…)方法。为了完成在应用启动时自动注册,也可直接通过Runnable类创建一个新的线程,并将注册应用程序的代码放入到该线程中。下面我们在MainActivity.java文件中onCreate(…)生命周期方法中注册应用程序,具体实现如代码3-8所示。

代码3-8

此时,编译并运行应用程序。当弹出MainActivity的界面后会依次弹出“STARTTO__INITIALIZE”“ASSETSLOADED_”“应用程序注册成功!API Key successfully registered”等提示,如图3-10所示。另外,读者可以在Android Studio的Logcat面板中查看到下载限飞数据库的提示,且这些下载提示出现在“ASSETSLOADED”弹_出之前。

图3-10 注册应用程序成功界面

通过onRegister(DJIError djiError)方法回调参数djiError的getDescription()方法可获取注册失败的详细描述信息,常见的错误如下所示。

● For first time registration, app should be connected to Internet:首次注册时,需要连接互联网对应用程序密钥进行验核。

● The app key submitted is invalid. Please check the app key you provided:密钥输入错误,需要检查密钥的正确性。

● The metadata received from server is invalid, please reconnect to the server and try:从服务器传递回来的元数据校验失败,此时可尝试重新连接服务器再次注册。

● The app key reached maximum number of activations, please contact <dev@dji.com> for help:免费版账号申请的密钥注册应用程序的次数超出了20次的限制。

● The app key is prohibited, please contact <dev@dji.com> for help:密钥被吊销,此时需要联系大疆官方寻求帮助。

另外,应用程序是否注册成功可通过SDK管理器的hasSDKRegistered()方法确认。

2. 连接无人机

连接与断开无人机分别通过SDK管理器的startConnectionToProduct()和stopConnection ToProduct()方法实现。为了方便起见,可以将startConnectionToProduct()方法调用放置在注册应用程序成功的代码中。另外,在SDKManagerCallback回调中的onProductConnect(…)、onProductDisconnect(…)和onComponentChange(…)方法中添加一些提示代码,具体实现如代码3-9所示。

代码3-9

❀ 上述连接方法仅限于大疆无人机产品和通过Wi-Fi连接的手持云台相机产品。对于采用蓝牙连接的手持云台相机,则需要通过SDK管理器的getBluetoothProductConnector()方法搜索蓝牙设备连接器,并分别通过蓝牙设备连接器对象的searchBluetoothProducts(…)、connect(…)和disconnect(…)方法搜索、连接和断开蓝牙设备。

编译运行程序并连接大疆无人机,稍等片刻应用程序会先后回调到onComponentChange(…)方法和onProductConnect(…)方法,并弹出类似如图3-11所示的连接提示。当无人机断开连接时,会回调onProductDisconnect(…)方法,并弹出如图3-12所示的断开连接提示。

图3-11 无人机连接提示

图3-12 无人机断开连接提示 pVaT+ZfzIEGVxKTOG66jXq1mj8LjdfBDGYEOWTmx7h930a0sJRtVemcEvtWx1ljO

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开