当Sphero同步并且我使用多个活动时如何保持蓝牙连接

当我与Sphero同步并且我想从一个活动传递到另一个活动时,我的同步将丢失,我必须在新活动中使用onCreate中的此方法再次获得同步:

**RobotProvider provider = RobotProvider.getDefaultProvider(); mRobot = provider.findRobot(robot_id); provider.initiateConnection(robot_id); provider.control(mRobot); provider.connectControlledRobots();** 

mRobot具有Sphero的MAC地址。 但是我尝试它的所有时间并不好,我想保留所有应用程序的蓝牙连接,因为我第一次连接并且能够保持它而不再同步。

我已经看到Sphero的官方Orbotix应用程序,我认为是完美的,因为同步是永久性的。 你能用这种方式帮助我吗?

在Orbotix,我们通常使用一个中心Activity并在其顶部显示临时活动,或者(最近)我们使用FragmentActivity ,它首先显示一个负责连接的片段(在你的问题中同步)。 从那里,我们使用不同的自定义片段显示不同的屏幕。

如果您绝对需要将Robot对象发送到另一个Activity,则可以将机器人ID添加到Intent,然后在新Activity中从RobotProvider获取机器人对象。 这还要求您确保不要根据原始活动的生命周期与Sphero断开连接。

在您的原始活动中:

  private void startNextActivity() { Intent nextActivity = new Intent(this, NextActivity.class); nextActivity.putExtra("robot.id", mRobot.getUniqueId()); goingToNextActivity = true; startActivity(nextActivity); } @Override protected void onStop() { super.onStop(); // don't disconnect if headed to "NextActivity" if (!goingToNextActivity) { RobotProvider.getDefaultProvider().disconnect(mRobot); mRobot = null; } } 

在您的新活动中:

  @Override public void onCreate(Bundle savedInstanceState) { super.OnCreate(savedInstanceState); // get the robot object sent through to this Activity String robotId = getIntent().getStringExtra("robot.id"); Robot robot = RobotProvider.getDefaultProvider().findRobot(robotId); }