ros android_core学习笔记

2019-03-30  本文已影响0人  虚无一代

本笔记以app的页面为导向逐步介绍连接master——启动服务的过程

1. 连接master

当前活动继承了RosActivity类:
public class MainActivity extends RosActivity
和获取master的uri有关的都在RosActivity类中,因此只关注该类中的代码:

  1. 首先,启动了onStart()
  2. 然后启动了bindNodeMainExecutorService()方法
  3. 在bindNodeMainExecutorService内部,建立了服务:NodeMainExecutorService
    同时,绑定了客户端nodeMainExecutorServiceConnection
  4. nodeMainExecutorServiceConnection内部,如果满足一系列要求,并且此时还没有获得masterUri,就会启动startMasterChooser()方法。如果已经有了,就会调用init()抽象方法。
  5. startMasterChooser()方法内部就会通过startActivityForResult调用MasterChooser的实例masterChooserActivity得到其result。
  6. 对该result的处理是在OnActivityResultCallback内部进行的,会启动master

2. 发布消息

获得MasterUri之后就会启动init()。由于是抽象方法,所以init方法会在你的app的MainActivity中重写:

//pubsub中的代码
  protected void init(NodeMainExecutor nodeMainExecutor) {
    //Talker类来自rosjava的tutorial
    talker = new Talker();

    // At this point, the user has already been prompted to either enter the URI
    // of a master to use or to start a master locally.

    // The user can easily use the selected ROS Hostname in the master chooser
    // activity.
    NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(getRosHostname());
    nodeConfiguration.setMasterUri(getMasterUri());
    nodeMainExecutor.execute(talker, nodeConfiguration);
    // The RosTextView is also a NodeMain that must be executed in order to
    // start displaying incoming messages.
    nodeMainExecutor.execute(rosTextView, nodeConfiguration);
  }
上一篇下一篇

猜你喜欢

热点阅读