簡體   English   中英

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

[英]Why is BluetoothSocket.connect() called before Toast.makeText().show()?

我試圖在嘗試連接到從ListView中選擇的Bluetooth設備之前顯示Toast消息,但是問題是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();

        // ...
    }

});

問題是連接可能需要一點時間,並且您必須確保僅在連接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秒鍾后再進行連接和檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM