大疆社区
标题: DJI Key的心得分享 [打印本页]
作者: kv886 时间: 2020-7-30
标题: DJI Key的心得分享
之前有问题咨询官方的技术支持,有让我使用dji key。自己摸索了一下,也摸索出了一点经验,给大家分享分享。
1、DJI key是什么;
DJIkey应该是MSDK底层实现的一种机制,通过key和callback的组合实现一些最基础的控制功能。大疆提供的其它API方法应该是对DJI key进行了上层封装,使其功能更加多样化,也更加方便开发者使用。
2、KeyManage类介绍
KeyManage这个类大概有这么几部分,DJIKey类、成员函数、Callback类。下面就分别介绍一下。
2.1DJIKey类
看文档上的描述这个应该是所有Key类的基类,底下有很多的子类,例如BatteryKey。每个子类下面又有很多的成员,这些成员应该就是一些特定的标识,通过这些标识来实现具体的功能。例如BatteryKey下的VOLTAGE,就是用来获取电池电压的key。官方的文档中每个这样的成员都有一个Access参数。这个是跟KeyManage中的方法对应的,例如“GET”就表示这个key是gettable的,可以用getValue调用。但是Access里有一个“PUSH”参数官方没有明确说明代表的意义。
2.2成员函数
文档中应该还说的比较清楚,getValue用来获取值,key参数必须是gettable的。setValue用来设置值,key参数必须是settable的。addListener用来监听参数变化。
2.3Callback类
主要是成员函数中需要用到的callback参数。
3、用法介绍
其实官方已经有提供详细的示例了。大致的过程就是:
1、先创建一个key;
2、 创建一个Callback 函数;
3、调用getValue\setValue\addListener方法,将上面的参数传给该方法。
4、小技巧
4.1 API函数存在Bug,不妨试试直接调用key来控制。
楼主之前遇到个问题,在4.12版本的时候调用getRTKEnable()没办法获得回调。官方虽然说是bug,后续版本会修复,但是按照MSDK一般的发版进度,估计也是几个月之后了。如果项目紧急,遇到这样的bug也是挺蛋疼的。好在这个问题可以通过直接调用key来解决,也算是可以在关键时刻解燃眉之急。
4.2 使用key可以实现的功能更多。
随便举个例子,MSDK提供的API中没有设置飞机名称的方法。但是FlightcontrollerKey里面有AIRCRAFT_NAME的key。因此就可以调用这个key给飞机命名,作为不同飞机之间的标识。
4.3 使用key,获取数据更加灵活。
使用key获取数据有
同步方法:@Nullable Object getValue(@NonNull DJIKey key)
异步方法:void getValue(@NonNull DJIKey key, @NonNull final GetCallback callback)
监听方法:void addListener(@NonNull DJIKey key, @NonNull final KeyListener listener)
而MSDK提供的API往往只有种默认方法。楼主之前遇到一个问题,想实时获取相机的焦距,但是MSDK只提供了一个get方法,调用一次获取一次焦距值。完全做不到实时监听啊。好在楼主想到可以通过调用key来解决这个问题。 在API页面很容易查到API对应的key
把这个key的获取方式改为监听
然后
OK大功告成
作者: 小鱼人 时间: 2020-7-31
"在4.12版本的时候调用getRTKEnable()没办法获得回调",深有体会.
欢迎光临 大疆社区 (https://bbs.dji.com/) |
Powered by Discuz! X3.2 |