android - 在 Android: Debuging startDiscovery ( ),蓝牙

  显示原文与译文双语对照的内容

我正在开发一个搜索可以发现设备并将它的显示为按钮的应用程序。 当调用 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

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

时间: 原作者:

我确认这个问题。

在某些电话上你只需要禁用/激活 BT 。 你可以用编程方式


mBluetoothAdapter.disable(); 


mBluetoothAdapter.enable();



在一些电话上,( 三星 S5 ) 不够。 为了检测它,我使用计时器,如果在超时时间结束的话,( BluetoothAdapter 。action_discovery_started或者 BluetoothAdapter.ACTION_DISCOVERY_FINISHED ) 不会收到的标志。 实际上我显示对话框,建议用户重新引导电话。

...