2014-07-02 4 views
7

Ich möchte eine App erstellen, die ** die Hauptaktivität startet, wenn das Gerät wackelt, auch wenn der Bildschirm gesperrt ist. Kann mir jemand erklären, wie man das macht?Wie erstelle ich eine Android-App, die bei Erschütterungen aktiviert wird, wenn der Bildschirm gesperrt ist?

Ich habe eine Idee, dass es erfordert, um einen Dienst zu erstellen, der im Hintergrund ausgeführt wird, aber ich habe Probleme mit der tatsächlichen Codierung und weiß nicht, wie es geht.

+0

dies lesen: http://tinyurl.com/so-hints – ben75

+0

Vielen Dank für Anregungen. Ich fand viele Antworten in Stücken, die ich nicht integrieren konnte. Daher musste ich eine offene Frage stellen. – SHD

Antwort

29

eine App zu erstellen, die Veranstaltung schütteln empfindlich ist:

A. In manifestieren - ein Boot-Empfänger registrieren. Es wird sicherstellen, dass Ihre App wird immer nach Neustart des Gerätes aktiviert werden:

<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. erstellen Shake-Ereignis-Listener-Klasse:

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



C. Boot-Empfängerimplementierung - Registrieren eines Shake-Listeners für TYPE_ACCELEROMETER-Ereignisse

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. Wenn schütteln Bewegung erkannt wird - Ihre Haupttätigkeit beginnen:

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); 
    } 
} 



Das einzige, was wir ausgelassen die Logik "shake Bewegung erkannt".

Here können Sie eine einigermaßen gute Basis-Implementierung finden. Verwenden Sie die Funktion onSensorChanged(). Sie müssen wahrscheinlich darauf variieren, bis Sie es richtig machen.



Berechtigungen:

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

Das ist eine großartige Erklärung! Ist handleShake (event) eine Standardmethode? Android Studio erkennt es nicht. Ich bin nicht in der Lage, B. und D. zu verbinden. Könnten Sie mir helfen? – SHD

+0

Wenn der Shake-Listener in einer Aktivität implementiert ist, registrieren wir den Listener in onResume und heben die Registrierung in onPause auf. Was machen wir im Service? Wann werden wir den Hörer abmelden? – inquisitive

+0

Hier möchte ich die aktuelle Aktivität und den Kontext in der ShakeEventListener-Klasse kennen. Wie bekomme ich das? – inquisitive

Verwandte Themen