Autore Topic: Intercettare Tasto + eseguire sua azione default  (Letto 2795 volte)

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Intercettare Tasto + eseguire sua azione default
« il: 09 Ottobre 2011, 18:27:04 CEST »
0
ciao a tutti, nella mia app, nella PreferenceActivity vorrei intercettare HOME, BACK e SEARCH , alla pressione di questi lanciare un service e poi continuare con la loro operazione standard.. es. premo home: parte il mio servizio e poi si va alla home, avete i dea di come si faccia ?

una cosa del genere:
Codice (Java): [Seleziona]
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (  (keyCode == KeyEvent.KEYCODE_BACK)  ||    (keyCode == KeyEvent.KEYCODE_HOME) ||   (keyCode == KeyEvent.KEYCODE_SEARCH) ){
               
                startService(new Intent(this, ScheduleAlarm.class));
               
                /* faiAzioneStandardTastoPremuto()
                    caso Home: manda alla Home
                    caso Search : avvia la ricerca
                    caso Back : finish() ( penso che il tasto back in generale esegua la finish no ? )
                */

                faiAzioneStandardTastoPremuto();

                return true;
        }
       
        return super.onKeyDown(keyCode, event);
    }

altra cosa, le preferenze vengono salvate nelle Shared Pref appena vengono modificate o alla pressione di back ? credo vengano salvate subito ma vorrei essere sicuro, in quanto il mio service poi andrà a basarsi sulle Shared Pref che quindi devono essere aggiornate agli ultimi valori al momento della startService ( .. )

Grazie in anticipo !

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:Intercettare Tasto + eseguire sua azione default
« Risposta #1 il: 09 Ottobre 2011, 20:12:23 CEST »
+1
[...] vorrei intercettare HOME, BACK e SEARCH , alla pressione di questi lanciare un service e poi continuare con la loro operazione standard.. [...]
Dovrebbe essere sufficiente quanto segue:
Codice (Java): [Seleziona]
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK  
             || keyCode == KeyEvent.KEYCODE_HOME
             || keyCode == KeyEvent.KEYCODE_SEARCH) {
               
                startService(new Intent(this, ScheduleAlarm.class));
        }
       
         return super.onKeyDown(keyCode, event);
    }

[...] altra cosa, le preferenze vengono salvate nelle Shared Pref appena vengono modificate o alla pressione di back ? [...]
Le SharedPreferences vengono salvate esattamente quando nel codice richiami il metodo commit() del SharedPreferences.Editor che hai utilizzato per settare i tuoi valori.
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Re:Intercettare Tasto + eseguire sua azione default
« Risposta #2 il: 10 Ottobre 2011, 21:14:36 CEST »
0
si ok so che nelle preference custom funziona così, me lo chiedevo per le preference standard tipo ListPreference.. cmq dovrebbero salvarsi subito anche quelle credo

ok grazie, così funziona tranne per il tasto home, che se ne frega, non lancia il toast nè scrive nel log, che fare ??
Codice (Java): [Seleziona]
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (  (keyCode == KeyEvent.KEYCODE_BACK)
                 ||     (keyCode == KeyEvent.KEYCODE_HOME) ||
                        (keyCode == KeyEvent.KEYCODE_SEARCH)
                        ){
                // exiting settings, set alarm !
                startService(new Intent(this, ScheduleAlarm.class));
                Toast.makeText(myCont, "Intercettato !", Toast.LENGTH_LONG).show();
                Log.v("KeyDown", "launch schedule alarm" );
        }
       
        return super.onKeyDown(keyCode, event);
    }

EDIT: credo che, per sicurezza, home sia più difficile da intercettare.. se riuscite a smentire ciò che ho letto online ve ne sarò grato a lungo
il fatto è che la mia app si basa su un servizio quindi:
se dopo aver modificato le impostazioni invece di premere back e tornare al main si preme home l'app non si attiva.. perchè per ora il servizio viene lanciato nell'onResume del main..
« Ultima modifica: 12 Ottobre 2011, 21:53:18 CEST da funcool »

Offline mancasal

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S i9000
  • Sistema operativo:
    Linux
Re:Intercettare Tasto + eseguire sua azione default
« Risposta #3 il: 17 Ottobre 2012, 00:40:42 CEST »
+1
Implementando questo metodo:

Codice: [Seleziona]
    @Override
    public void onAttachedToWindow()
    { 
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow(); 
    }

Si disabilita il comportamento standard (solo per questa activity) del tasto home.
A questo punto puoi implementare il metodo onKeyDown per intercettare il tasto Home

Codice: [Seleziona]
   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_HOME) {
               
                Log.v("test", "Pressione tasto HOME");
        }
         return super.onKeyDown(keyCode, event);
    }

Attenzione!!! L'utente si aspetterà di tornare alla HOME quindi il metodo andrebbe implementato in modo da non disattendere questa aspettativa.

Offline funcool

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid CM 7.1
  • Play Store ID:
    elcasa
  • Sistema operativo:
    Windows 8
Re:Intercettare Tasto + eseguire sua azione default
« Risposta #4 il: 09 Novembre 2012, 21:01:18 CET »
0
Grazie per la risposta, ormai avevo risolto in un altro modo ( lancio il Service nell'evento onPause dell'activity che scatta alla pressione dei tasti Back e home ed in tutti gli altri casi in cui si lascia l'activity ) ma potrebbe sempre essere utile per qualcun'altro!