Android蓝牙启用变得疯狂。我正在开发一个聊天类型的应用程序,它将填充蓝牙设备(配对非配对并在范围内发现)到ListView
。
一旦我打开蓝牙,后台代码
ArrayOfDevices = btAdapter.getBondedDevices();
if(ArrayOfDevices.size()>0)//paired dev more than 0
{
for(BluetoothDevice device: ArrayOfDevices)
{
listAdapter.add(device.getName()+ "\n" +device.getAddress());
}
//for breadcast recievers and registering them//
}
这个listadapter已正确填充,但它需要蓝牙已经开启此事。 蓝牙代码是:
if(!btAdapter.isEnabled())
{
Toast.makeText(getApplicationContext(), "Enablingggggg the bluetooth device",
Toast.LENGTH_SHORT).show();
Intent iBlueEnabled = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(iBlueEnabled, 1);
}
else //
//some code follows
问题是启用蓝牙很简单,但是当我启用蓝牙后需要遵循的代码时会出现问题。该代码在蓝牙正确启用之前执行(因为它需要时间)。 使用自定义蓝牙适配器的问题对我来说是遥不可及的。 专家的任何解决方案??? 提前谢谢你。
答案 0 :(得分:0)
只有成功启用蓝牙,才能执行代码。
覆盖onActivityResult()
,如果获得RESULT_OK
,则执行代码以确保已启用适配器。
修改强>
使用Semaphore
是另一种选择,这是一个简单的例子
final Semaphore semaphore = new Semaphore(0, true);
在运行使用蓝牙适配器的代码之前(如果未启用)
semaphore.acquire();
蓝牙适配器启用或失败后,即onActivityResult
semaphore.release();