0

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//
}

此列表适配器已正确填充,但为此需要已打开蓝牙。蓝牙代码是:

        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

问题是启用蓝牙很简单,但是当我在启用蓝牙后有代码要遵循时,就会出现问题。该代码在蓝牙正确启用之前执行(因为它需要时间)。使用自定义蓝牙适配器的问题对我来说是遥不可及的。高手有什么解决办法???先感谢您。

4

1 回答 1

0

仅当蓝牙成功启用时,您才必须执行代码。

覆盖onActivityResult(),如果你得到RESULT_OK然后执行你的代码以确保适配器已经启用。

编辑

使用Semaphore是另一种选择,这里是一个简单的例子

final Semaphore semaphore = new Semaphore(0, true);

在运行未启用使用蓝牙适配器的代码之前

semaphore.acquire();

蓝牙适配器启用或失败后,即在 onActivityResult

semaphore.release();
于 2013-10-10T20:33:18.163 回答