После некоторых исследований я пришел к выводу, что установка обнаруживаемого тайм-аута без взаимодействия с пользователем возможна только с правами суперпользователя (как уже предлагалось в предыдущем ответе). Однако для тех, кому это нужно, вот необходимое решение:
private void ensureBluetoothDiscoverability() {
try {
IBluetooth mBtService = getIBluetooth();
Log.d("TESTE", "Ensuring bluetoot is discoverable");
if(mBtService.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
Log.e("TESTE", "Device was not in discoverable mode");
try {
mBtService.setDiscoverableTimeout(100);
// mBtService.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, 1000);
} catch(Exception e) {
Log.e("TESTE", "Error setting bt discoverable",e);
}
Log.i("TESTE", "Device must be discoverable");
} else {
Log.e("TESTE", "Device already discoverable");
}
} catch(Exception e) {
Log.e("TESTE", "Error ensuring BT discoverability", e);
}
}
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
А затем создайте новый пакет android.bluetooth, поместите два файла в IBluetooth.aidl и IBluetoothCallback.aidl и вставьте код, как показано здесь .
Это позволит получить доступ к функциям, которые недоступны в стандартном API, но для некоторых из них вам потребуется разрешение на «запись безопасных настроек» (строка комментария выше, где вы получите это исключение из-за отсутствия разрешений для процесс / пользователь).