【问题标题】:Why is BluetoothSocket.connect() called before Toast.makeText().show()?为什么在 Toast.makeText().show() 之前调用 BluetoothSocket.connect()?
【发布时间】:2019-07-02 13:57:17
【问题描述】:

我正试图在尝试连接到我从 ListView 中选择的Bluetooth 设备之前显示 Toast 消息,但问题是连接后会出现 Toast 消息,以便用户可以知道他们的设备当前是否正在尝试连接到选定的 BT 设备。应该是这样的:

  • ListView 中选择的设备
  • Toast 消息:“正在连接...”
  • btSocket.connect() 已被调用并成功连接
  • Toast 消息:“已连接!”

相反,它是这样发生的:

  • ListView 中选择的设备
  • btSocket.connect() 已被调用并已成功连接
  • Toast 消息:“已连接!”
  • Toast 消息:“正在连接...”

请注意,当尝试连接到 btSocket 时,应用会冻结,然后解冻并继续其工作。

示例代码:

listView_myDevices.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        BluetoothSocket btSocket;

        // ... Determine which device is selected, etc.

        Toast.makeText(MyActivity.this, "Connecting...", Toast.LENGTH_SHORT).show();

        btSocket.connect();

        Toast.makeText(MyActivity.this, "Connected!", Toast.LENGTH_SHORT).show();

        // ...
    }

});

【问题讨论】:

  • 我对你这句话“设备已连接”没有清楚的理解..它来自哪里?
  • @AbdulWaheed 我已经编辑了我的帖子。很抱歉造成混乱。
  • 你确定你有完整的onItemClick事件代码吗?
  • @AbdulWaheed 我认为没有必要。一切都被调用没有问题。我已经确认使用断点,但是在调用Connecting... 消息后,它没有出现,它卡在btSocket.connect(); 上,建立连接并调用Connected! toast,然后调用@987654332之后@吐司。

标签: java android bluetooth android-toast


【解决方案1】:

问题是连接可能需要一点时间,您必须确保 Toast-CONNECTED 仅在连接后触发。最快但不是最好的解决方案将是

BluetoothSocket btSocket;
        Toast.makeText(MyActivity.this, "Connecting...", Toast.LENGTH_SHORT).show();
        btSocket.connect();


    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (btSocket.isConnected()){
                Toast.makeText(MyActivity.this, "Connected!", Toast.LENGTH_SHORT).show();
            }            }
    }, 5000);

所以你给连接时间并在 5 秒后检查它

【讨论】:

  • 但是Connected! 不是问题。它在连接到设备后显示,这是我想要的。问题是Connecting... 没有在btSocket.connect() 之前显示,而是在Connected! 之后显示。
  • 好吧,你的代码可以工作,但是Connecting... 仍然在btSocket.connect() 之后被调用。
  • @wEight 是否出现标志 CONNECTED ?
  • 是的,但Connecting... 出现在btSocket.connect() 之后而不是之前。
  • 首先请解释一下您需要以正确的方式显示TOASTS吗? btSocket.connect() 方法没有 UI 部分,也没有回调。那么用非ui连接方法连接ui toast的目的是什么?这种操纵的主要目的是什么?
猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2015-07-31
  • 2013-03-31
相关资源
最近更新 更多