正在上传图片(0/1)

DJI Key的心得分享

 1
手机看帖 1 1324
之前有问题咨询官方的技术支持,有让我使用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 3#
"在4.12版本的时候调用getRTKEnable()没办法获得回调",深有体会.
取消 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表