Android蓝牙ACTION_DISCOVERY_FINISHED无效

Dav*_*rns 7 android bluetooth

我写了我的第一个Android应用程序,一切都运行很好,除了...在例程中,下面,ACTION_DISCOVERY_FINISHED似乎永远不会被调用(或广播或接收或其他).无论" else if "中的代码块是什么不起作用.

我只在我的摩托罗拉Atrix上测试过,所以我想知道这是不是问题.由于我正在测试蓝牙功能,我认为我不能使用Android模拟器进行有效测试.

思考?

private BluetoothAdapter mBtAdapter;
mBtAdapter.startDiscovery();

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
        //do something
        }

        else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            //do something else
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ong 20

2种可能的解决方案:

  1. 而不是创建一个匿名接收器,使用相同的实现子类BroadcastReceiver,然后在项目清单中声明它(记住声明您的接收器接收到您想要的这些操作).

  2. 以这种方式从您的活动/服务动态注册它:

    IntentFilter filter = new IntentFilter();
    filter.addAction(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    this.registerReceiver(mReceiver, filter);
    
    Run Code Online (Sandbox Code Playgroud)

我不确定在从活动/服务注册时是否必须取消注册(我知道你必须在从应用程序的上下文注册时),所以检查一下.

  • @Jong尝试了第二个建议并且有效.感谢帮助 (2认同)