Это асинхронный процесс, полностью управляемый Android. AFAIK, к сожалению, вы не можете «улучшить» его или «принудительно» каким-либо образом (за исключением, может быть, запуска как root и написания стека BT самостоятельно).
ОБНОВЛЕНИЕ : Первоначально я не задумывался о том, чтобы попытаться включить / выключить функцию Bluetooth.
private static BroadcastReceiver btReceiver = null;
// ..
void toggleRefreshBluetooth ()
{
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter ();
if (mBluetoothAdapter.isEnabled ())
{
mBluetoothAdapter.disable ();
}
}
// ... in onCreate
btReceiver = new BroadcastReceiver ()
{
@Override
public void onReceive (Context context, Intent intent)
{
if (intent != null && BluetoothAdapter.ACTION_STATE_CHANGED.equals (intent.getAction ()))
{
final int state = intent.getIntExtra (BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
switch (state)
{
case BluetoothAdapter.STATE_OFF:
// Bluetooth has been turned off
mBluetoothAdapter.enable ();
break;
case BluetoothAdapter.STATE_TURNING_OFF:
// Bluetooth is turning off
break;
case BluetoothAdapter.STATE_ON:
// Bluetooth has been on
break;
case BluetoothAdapter.STATE_TURNING_ON:
// Bluetooth is turning on
break;
}
}
}
};
final IntentFilter filter = new IntentFilter ();
filter.addAction (BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver (btReceiver, filter);
Вызов toggleRefreshBluetooth
может вызвать правильное повторное сканирование. Попробуйте, если это не неудобно в ваших обстоятельствах.
Приложение не должно быть системным приложением, и вам не нужно рутировать телефон. Единственное, что вам нужно, это разрешение Manifest.permission.BLUETOOTH_ADMIN
.