android - Android 上的蓝牙 : Debuging startDiscovery()

标签 android bluetooth discovery

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

我还使用 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

更新:我在应用程序运行时转到蓝牙设置下的“扫描”,但我无法扫描新设备。我禁用/启用蓝牙并返回应用程序,问题已解决。我不知道这是否表示适配器正忙或以某种方式停止。

最佳答案

我确认这个问题。

在某些手机上,您只需禁用/激活 BT。您可以通过编程方式进行操作

mBluetoothAdapter.disable(); 
mBluetoothAdapter.enable();

在某些手机上还不够(三星 S5)。为了检测它,我使用计时器,如果在超时结束时未收到 BT 广播状态的更改(BluetoothAdapter.ACTION_DISCOVERY_STARTED 或 BluetoothAdapter.ACTION_DISCOVERY_FINISHED)=> 它表明 BT 不工作。实际上我显示了建议用户重启手机的对话框。

关于android - Android 上的蓝牙 : Debuging startDiscovery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921632/

相关文章:

android - 如何访问和引用全局类中的变量和函数

android - 在 android studio 中找不到未签名的 APK,它在哪里?

WCF 服务在本地运行时总是返回发现页面

android - 如何在 Android 中(取消)黑名单联系人/号码?

java - 从edittext-Android获取文本出错

Android 2.1 : Grateful for crash analysis help: signal 11 (SIGSEGV), 故障地址 deadbaad

Flutter 蓝牙打印到 Zebra

linux - 在 linux 中读取广告数据

.net - WCF 中的 Web 服务发现 : Ws-Discovery or UDDI?

带元数据的 WCF 服务发现