Salve a tutti,
la mia ricerca su come poter sfruttare in lungo e in largo il bluetooth di android sta dando buoni frutti. Ho appena trovato un raggiro orribile ma funzionante per rendere il BT constantemente visibile (attualmente android limita ad 300 secondi la visibilità e per poter continuare a tenerlo visibile è necessario l'intervento dell'utente).
Prerequisiti:
- android con accesso root
- possibilità di montare /system con i premessi RW
Cosa fare:
Una volta attivato il Bluetooth, l'applicazione deve chiamare, tramite reflection il metodo: setScanMode(int,int) presente nella classe BluetoothAdapter con gli argomenti:
- BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABL E
- un tempo XY in secondi (ad esempio 100 secondi)
questo metodo deve essere richiamato ogni XY-tot (90 secondi ad esempio).
Per questo potete usare un semplice handler e il metodo sendEmptyMessageDelayed()
Altri due passi fondamentali:
- il manifest deve contenere il permesso: android.permission.WRITE_SECURE_SETTINGS necessario al metodo setScanMode()
- e l'applicazione deve essere installata in /system/app per ottenere i permessi necessari ad utilizzare WRITE_SECURE_SETTINGS per il bluetooth.
fatto questo la vostra applicazione, finchè non viene terminata, continuerà a mantenere visibile il bluetooth.
Ecco un esempio mal scritto di handler:
codice:
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
try {
Method m = adapter.getClass().getMethod("setScanMode", int.class,int.class);
m.invoke(adapter,BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE,100);
} catch (Exception e) {
e.printStackTrace();
}
sendEmptyMessageDelayed(1, 90000);
}
};
Per rendere visibile il bluetooth basta chiamare:
codice:
handler.sendEmptyMessage(1);
per rendere invisibile il bluetooth invece o si richiama setScanMode con il parametro BluetoothAdapter.SCAN_MODE_CONNECTABLE, oppure si ferma l'handler con
codice:
handler.removeMessages(1);
Spero che possa essere d'aiuto a qualcuno!
A presto
Marco