安卓:如何将蓝牙连接传递给另一个活动?

4
我有我的第一个Activity,在其中建立了BT连接。用户会看到一个选项,根据他们的选择,将加载不同的Activity。
问题是,两个Activity都需要BT连接,我不明白为什么要销毁一个连接才能建立另一个连接。
有没有方法可以在活动之间传递连接?
有人有相关示例或链接吗?
我已经尝试过“class MyApplication extends Application”,但然后我不能使用:
super.onCreate(savedInstanceState);
setContentView(R.layout.blablabla);

这可能是一个很愚蠢的问题,但我只接触安卓大约两周。


可能是在Android上跨活动保持蓝牙连接的重复问题。 - Nicolas Kaiser
这个链接提供了很好的解释。 https://dev59.com/_VHTa4cB1Zd3GeqPTq09 - antonio081014
4个回答

5

您尝试过使用Application对象将蓝牙连接存储在对象中,并在Activity中调用吗?

您可以尝试以下方式实现。(注意:我从未在Android上使用过蓝牙,因此不知道应该使用哪些相关类。在这种情况下,我将使用BluetoothDevice,因为根据库的文档,它似乎是正确的类)

public class MyApplication extends Application {
    BluetoothDevice device;
    ...
    public synchronized BluetoothDevice getBtConnection() {
        if (device == null) {
            // construct a BluetoothDevice object and put it into variable device
        }
        return device;
    }
}

那么,你的第一个活动只需要执行以下操作:
public class FirstActivity extends Activity {
    private BluetoothDevice device;
    ...
    @Override
    protected void onCreate(Bundle b) {
        super(b);
        ...
        device = ((MyApplication) getApplication()).getBtDevice();
        ...
    }
    ...
}

接下来,如果您的其他活动需要使用该连接,只需调用getBtDevice(),因为FirstActivity已经实例化了它。


嗯,我还没有尝试过这个。我对Android非常新手,所以我会尽力去尝试看看它是否有效(希望如此)。感谢您的建议。 - richard

0

我知道这是一个老问题,但对于访问此主题的新人:

我认为Kibibyte的答案也可以,但否则可以使用(Bound)Service选项。即使应用关闭,它也会运行。

官方Android服务文档


0

你的意思是什么?我该如何使用它?我对此还很陌生 :) - richard
你可以将数据推入意图并将该意图传递到下一个活动中。在那个活动中,你可以通过Bundle.getExtras("key")来获取这些数据。 - Androider
似乎我只能传递原始类型,但我需要传递一个对象。 - richard
它仍然不起作用 :( 应用程序会崩溃并挂起我的手机 :O 我按照两个示例中的方式完全相同地执行了它。 它可以使用普通类对象工作,但不能使用蓝牙连接。 - richard

-1
我之前也遇到过同样的问题,最终解决了! 首先,在 Activity 中创建连接,并确保将该连接存储在 public static 变量中,这样你就可以在每个需要蓝牙连接的活动中调用连接变量。 我建议你使用服务类来创建连接,并像这样使用连接变量。
BluetoothChatService mChatService=DeviceListActivity.chatService

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接