CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 29 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

[GUIDA] Rendere il bluetooth constantemente visibile per gli utenti ROOT

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    35

    Ringraziamenti
    3
    Ringraziato 1 volta in 1 Post
    Post

    [GUIDA] Rendere il bluetooth constantemente visibile per gli utenti ROOT

    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

  2.  
  3. #2
    Senior Droid


    Registrato dal
    May 2010
    Località
    Rivoli
    Messaggi
    426

    Ringraziamenti
    6
    Ringraziato 48 volte in 47 Posts
    Predefinito

    In pratica ogni 90 secondi dici al BlueTooth di rendersi visibile?
    Semplice ed efficace!
    Perche' scrivere tonnellate di classi, metodi & codice assortito, per fare un'operazione 'quick & dirty' ?


    P.S. Se il BlueTooth si 'nasconde' ogni 300 secondi, tanto vale alzare l'allerta a... a... 250 secondi, per esempio. Che ne pensi?

  4. #3
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    35

    Ringraziamenti
    3
    Ringraziato 1 volta in 1 Post
    Predefinito

    Più che di rendersi attivo, di mantenersi attivo
    Ogni volta che richiami il metodo setScanMode(), viene riavviato il timeout.
    Si se imposti come prima durata 250 secondi tanto meglio, risparmi in processi eseguiti.

    Ci sarebbe anche un altro metodo: utilizzando DBUS per settare le variabili pariable e discoverable del bluetooth. Bisognerebbe utilizzare dbus-send per modificare questi parametri ma deve essere compilato per android e installato.
    Proverò anche questo metodo, ma mi ci vorrà un pò.

    Infine bisogna valutare attentamente dove si va a scrivere e inizializzare l'handler e su che thread vogliamo farlo eseguire, si rischia che il sistema termini il servizio o l'applicazione e questa procedura venga bloccata.

    Marco

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy