为什么在Toast.makeText()。show()之前调用BluetoothSocket.connect()?

时间:2019-07-02 13:57:17

标签: java android bluetooth android-toast

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

  • ListView中选择的设备
  • 吐司消息:“正在连接...”
  • btSocket.connect()已被呼叫并已成功建立连接
  • 吐司消息:“已连接!”

相反,它是这样发生的:

  • ListView中选择的设备
  • btSocket.connect()已被呼叫并已成功建立连接
  • 吐司消息:“已连接!”
  • 吐司消息:“正在连接...”

请注意,当尝试连接到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();

        // ...
    }

});

1 个答案:

答案 0 :(得分: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秒钟后进行检查