2014-07-02 12 views
7

Desidero creare un'app che ** avvii l'attività principale ogni volta che il dispositivo scuote, anche quando lo schermo è bloccato. Qualcuno può spiegare come farlo?Come creare un'app per Android che si attiva in caso di scuotimento quando lo schermo è bloccato?

Ho un'idea che è necessario creare un servizio che viene eseguito in background, ma sto lottando con la codifica attuale e non so come farlo.

+0

leggere questo: http://tinyurl.com/so-hints – ben75

+0

Grazie mille per i suggerimenti. Ho trovato molte risposte a pezzi che non ho potuto integrare. Quindi avevo bisogno di fare una domanda aperta. – SHD

risposta

29

Per creare un app che è sensibile a tremare evento:

A. In manifesta - registrare un ricevitore di avvio. Si farà in modo che la vostra applicazione è sempre attivato dopo il riavvio del dispositivo:

<receiver android:name=".OnBootReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
     </intent-filter> 
    </receiver> 



B. Creare una classe di eventi scossa ascoltatore:

class ShakeEventListener implements SensorEventListener { 
     @Override 
     public void onSensorChanged(SensorEvent event) { 
       handleShake(event); // see below 
     } 
} 



C. Implementazione del ricevitore di avvio - registrare un listener di scuotimento per eventi TYPE_ACCELEROMETER

public class OnBootReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent){ 
     SensorManager sManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 
     sensor = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sManager.registerListener(new ShakeEventListener(), sensor, SensorManager.SENSOR_DELAY_NORMAL); // or other delay 
    } 
} 



D. Se viene rilevato Agitare movimento - iniziare la vostra attività principale:

void handleShake(event) { 
    if (shake movement detected) { 
     // start main activity 
     Intent intent = new Intent(getBaseContext(), myActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
} 



L'unica cosa che abbiamo lasciato fuori è il "movimento scuotere rilevato" logica.

Here è possibile trovare un'implementazione di base ragionevolmente buona. Usa la funzione onSensorChanged(). Probabilmente avrai bisogno di variare su di esso finché non lo farai bene.



Permessi:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
+0

Questa è una grande spiegazione! HandleShake (evento) è un metodo standard? Android Studio non lo riconosce. Non riesco a collegare B. e D. Potresti aiutare? – SHD

+0

se il listener di scuotimento è implementato in un'unica attività, registriamo il listener in onResume e annulliamo la registrazione in onPause. Cosa facciamo nel servizio? quando annulliamo l'ascoltatore? – inquisitive

+0

Qui desidero conoscere l'attività corrente e il contesto nella classe ShakeEventListener. come ottengo quello? – inquisitive

Problemi correlati