我正在编写一个Android应用程序,它使用蓝牙与传感器交互并获取温度值。我这样做是通过调用connectGatt()这是异步的,并在建立连接后调用回调。我面临的问题是我的代码必须等到连接建立。
这是在下面的代码中使用的方法的实现。
public boolean connect(final String address)
{
Log.v(LOG_TAG,"IN CONNECT METHOD"+Thread.currentThread().getName());
if(btadapter == null || address == null)
{
Log.v(LOG_TAG,"Unable to get Bluetooth Adapter or Address is not valid");
return false;
}
if(address != null && address.equals(btaddress) && btgatt != null)
{
Log.v(LOG_TAG,"Trying to connect to a bt gatt profile directly");
boolean result = btgatt.connect();
if(result)
return true;
return false;
}
btdevice = btadapter.getRemoteDevice(address);
if(btdevice == null)
{
Log.v(LOG_TAG,"Could not find device.");
return false;
}
btgatt = btdevice.connectGatt(this,false,btgattcallback);
Log.v(LOG_TAG,btgatt.toString());
btaddress = address;
Log.v(LOG_TAG,"Connecting to the device");
btConnectionState = STATE_CONNECTING;
return true;
}
目前我可以通过在处理程序线程中编写以下代码来解决此问题,因为我不想在等待回调时阻止UI线程。但我不相信这种做法。
if(mLocation != null)
{
connect(btaddress); // Method encapsulates calls to connectGatt method.
while (btConnectionState != STATE_CONNECTED) {
continue;
}
while (!services_discovered) {
continue;
}
//Other Code
我觉得可以有更好的方法解决这个问题,但无法在网上找到任何内容。我使用CountDownLatch和Semaphores看到了几个答案,但我并没有清楚地理解它们。
任何人都可以帮助我理解如何处理这些情况吗? 谢谢。