1

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

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

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

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

4

1 回答 1

1

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

如果您绝对需要将 Robot 对象发送到另一个 Activity,您可以将机器人 id 添加到 Intent 中,然后在新的 Activity 中从 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);
    }
于 2013-09-16T19:45:44.003 回答