2010-05-30 19 views
12

ho trovato nella documentazione Android come trasformare la modalità reperibilità Bluetooth:modalità rilevabile Disattiva Bluetooth su Android

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
startActivity(discoverableIntent); 

questo renderà il dispositivo rilevabile per 300 secondi (documentation).

La mia domanda è: come disattivare la rilevabilità prima che si verifichi questo timeout? Mi piacerebbe replicare l'impostazione corrispondente nell'applet Impostazioni | Wireless e reti | Impostazioni Bluetooth, che consente di attivare e disattivare la rilevabilità con un clic.

Qualsiasi aiuto?

+0

risolto con la riflessione in questa discussione: https://stackoverflow.com/a/47452626/5239473 –

risposta

9

Basta inviare una nuova richiesta rilevabile con la durata 1 (o 0 potrebbe anche lavorare):

Intent discoverableIntent = new 
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 1); 
startActivity(discoverableIntent); 
+1

Lol, hackish , ma funziona (con 1 solo). Grazie;) – Venator85

+0

D'accordo, ma è la migliore/unica soluzione che ho trovato. Allora, cosa fa la tua app? –

+0

È solo un semplice widget per abilitare/disabilitare la rilevabilità, niente di strano :) – Venator85

1

cancelDiscovery() non è per questo. Questo metodo può essere utilizzato per interrompere la scansione del dispositivo per altri dispositivi Bluetooth. È diverso da questo per rendere il dispositivo non visibile.

0

Fare attenzione quando si utilizza questo metodo, potrebbe essere facilmente modificato in quanto è nascosto.

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
try { 
    Method method = BluetoothAdapter.class.getMethod("setScanMode", int.class); 
    method.invoke(bluetoothAdapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE); 
} catch (NoSuchMethodException | IllegalArgumentException | IllegalAccessException | InvocationTargetException e) { 
    Log.e(TAG, "Failed to turn off bluetooth device discoverability.", e); 
} 

anche utilizzabile con SCAN_MODE_NONE e SCAN_MODE_CONNECTABLE_DISCOVERABLE (utilizza durata predefinita)

Source