当我与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,我们通常使用中央活动,并在其顶部显示临时活动,或者(最近)我们使用FragmentActivity,该活动首先显示负责连接的片段(问题中的同步)。从那里开始,我们使用不同的自定义片段显示不同的屏幕。
如果您绝对需要将漫游器对象发送到另一个活动,则可以将漫游器ID添加到Intent,然后在新的活动中从RobotProvider获取漫游器对象。这还要求您确保不要根据原始Activity的生命周期与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); }