Android上的蓝牙:调试startDiscovery()

时间:2014-04-07 19:45:48

标签: android bluetooth discovery

我正在开发一款可搜索可发现设备并将其显示为按钮的应用。 在致电startDiscovery()时,我会说,根据我目前正在调试的方式,它有30%的时间使用BroadcastReceiverACTION_DISCOVERY_FINISHED

我还使用isDiscovering()来测试startDiscovery()函数是否被调用,但它返回false。

有没有办法知道成功调用startDiscovery()?你能在我的代码中识别一些不会失败的东西吗?

Obs。:我同时拥有BLUETOOTHBLUETOOTH_ADMIN权限。

这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);

        mReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                String Address;
                // When discovery finds a device
                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                    // Get the BluetoothDevice object from the Intent
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    Address = device.getAddress();
                    System.out.println("Found Address: " + Address );  //DEBUG
                            //Do something with Address
                } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                    System.out.println("Discovery finished");
                }
            }
        };

        // Register the BroadcastReceiver
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(mReceiver, filter);    

        MainActivity.mBluetoothAdapter.startDiscovery();

        if (MainActivity.mBluetoothAdapter.isDiscovering()) {
            System.out.println("Discovering...");  //DEBUG
        }

}

虽然我有几个可发现的设备可用,但没有一个设备onReceive()触发ACTION_FOUND

更新:我去了#34; Scan"应用程序运行时,在蓝牙设置下,我无法扫描新设备。我禁用/启用蓝牙并返回到应用程序,问题得到解决。我不知道这是否表明适配器正在忙或停止。

1 个答案:

答案 0 :(得分:1)

我确认了这个问题。

在某些电话上,您只需要禁用/激活BT。您可以使用

以编程方式编写
mBluetoothAdapter.disable(); 
mBluetoothAdapter.enable();

在某些电话上还不够(三星S5)。为了检测它,我使用定时器,并且如果在超时结束时未接收到BT广播状态(BluetoothAdapter.ACTION_DISCOVERY_STARTED或BluetoothAdapter.ACTION_DISCOVERY_FINISHED)的变化=>这标志着BT无法正常工作。实际上我显示了建议用户重启电话的对话框。