Android蓝牙让人发疯

时间:2013-10-10 20:21:09

标签: android bluetooth android-bluetooth

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

问题是启用蓝牙很简单,但是当我启用蓝牙后需要遵循的代码时会出现问题。该代码在蓝牙正确启用之前执行(因为它需要时间)。 使用自定义蓝牙适配器的问题对我来说是遥不可及的。 专家的任何解决方案??? 提前谢谢你。

1 个答案:

答案 0 :(得分:0)

只有成功启用蓝牙,才能执行代码。

覆盖onActivityResult(),如果获得RESULT_OK,则执行代码以确保已启用适配器。

修改

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

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

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

semaphore.acquire();

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

semaphore.release();