Frage

Ich muss Beschleunigungsmesserdaten von meinem Android -Telefon sammeln, damit ich dafür ein kleines Programm gemacht habe.

Nach einigen Tests habe ich festgestellt, dass die Rate meines Nexus -Beschleunigungsmessers ist stets 50 Werte pro Sekunde, wenn das Telefon aktiv ist, und 6 Werte pro Sekunde, wenn es schläft (mit a PARTIAL_WAKE_LOCK), unabhängig von dem Tarif, den ich verlange (NORMAL, UI, GAME oder FASTEST).

Deshalb habe ich mich für eine im Internet gefundene Anwendung entschieden, die die Rate des Beschleunigungsmessers testet: http://samoht.fr/tuto/accelerometers-Frequence-on-android-with-code

Aber ich habe den gleichen "Fehler": Unabhängig von der Rate, die ich verlangt, sind es immer 50 Werte pro Sekunde, wenn das Telefon aktiv ist.

Ich verstehe nicht, warum sich mein Telefon so verhält. Ist es ein Problem :

  • im Zusammenhang mit den Nexus S?
  • Speziell für mein Telefon?
  • im Zusammenhang mit Android 4?

BEARBEITEN : Ich habe das Programm auf einem anderen Nexus S (Android 4) getestet und habe das gleiche Problem. Es scheint also eine der oben aufgeführten Möglichkeiten zu beseitigen: Es hängt nicht nur mit meinem Telefon zusammen.

War es hilfreich?

Lösung

Ich habe einige Tests auf verschiedenen Smartphones durchgeführt. Hier sind die Ergebnisse:

Samsung Galaxy Teos
-------------------
* When awake
    Normal: 4.17 Hz
    UI: 8.43 hz
    Game: 16.93 Hz
    Fastest: 109.42 Hz

* When asleep
    The phone sends null values (0), whatever the mode I chose


Samsung Nexus S
---------------
* When awake
    Normal: 49.51 Hz
    UI: 49.51 hz
    Game: 49.51 Hz
    Fastest: 49.51 Hz

* When asleep
    6.06 Hz, whatever the mode I chose

LG Nexus 5
----------
* When awake
    Normal: 15.39 Hz
    UI: 15.4 Hz
    Game: 50.05 Hz
    Fastest: 196.74 Hz

* When asleep
    Normal: 4.96 Hz
    UI: 15.41 Hz
    Game: 50.12 Hz
    Fastest: 198.53 Hz

LG Nexus 4
----------
* When awake
    Normal: 15.75 Hz
    UI: 15.74 Hz
    Game: 48.86 Hz
    Fastest: 195.85 Hz

* When asleep
    Normal: 5.5 Hz
    UI: 15.74 Hz
    Game: 49.16 Hz
    Fastest: 196.75 Hz


Samsung Galaxy Nexus
--------------------
* When awake
    Fastest: 125 Hz

* When asleep
    It sends data


Samsung Galaxy Note 2
---------------------
* When awake
    Fastest: 100 Hz

* When asleep
    The phone does not send anything


Samsung Galaxy S3 and S3 Mini
-----------------------------
* When awake
    Fastest: 100 Hz

* When asleep
    Fastest: 100 Hz


HTC Wildfire
------------
* When awake
    Normal: 4 Hz
    UI: 12 hz
    Game: 22.2 Hz
    Fastest: 38.40 Hz

* When asleep
    The phone does not send anything, whatever the mode I chose


HTC Desire
----------
* When awake
    Normal: 4.36 Hz
    UI: 11.9 hz
    Game: 23.3 Hz
    Fastest: 47.27 Hz

* When asleep
    The phone does not send anything, whatever the mode I chose

Beachten Sie, dass die Tests unter Verwendung eines teilweisen Wake -Locks durchgeführt wurden. Ohne sie liefert der Nexus S überhaupt keine Daten, wenn es schläft.

Es gibt auch eine nützliche Liste von Smartphones, die im Schlafengehen kompatible Daten senden (oder nicht): http://www.saltwebsites.com/2012/android-accelerometers-screen-off

Andere Tipps

Schließen Sie Ihr Telefon nicht über USB an einen PC an, während Sie Daten aufnehmen, da während der Sammlungsdaten nur in der SD -Karte protokolliert wird. Wenn das Telefon über USB mit PC angeschlossen ist, kann in der SD -Karte keine Datei gespeichert werden.

Versuchen Sie also, den USB zu trennen, während Sie die Daten sammeln.

Leider ist die Verzögerung (oder die Stichprobenrate), die Sie festgelegt haben Modi (Ausschalten von CPU usw.). Eine Möglichkeit, eine etwas gute Stichprobenrate zu erhalten, bestand darin, meine Daten aus einem Dienst aufzuzeichnen, den Service zu einem Vordergrundservice zu machen und eine Stromversorgung mit dem Flag partial_wake_lock zu haben.

Ich stelle den Code in diesen Gist einhttps://gist.github.com/julian-ramos/6ee7ad8a74ee4b442530

Dieser Gist hat viel mehr Code als Sie brauchen, achten Sie jedoch nur auf die nächsten beiden Methoden

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
//        //Power management
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
        wl.acquire();
.....}

Der obige Code verhindert, dass das Betriebssystem die CPU ausschaltet

Nun, um diesen Service zu einem Vordergrundservice zu machen

NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(getApplicationContext())
                        .setContentTitle("Title")
                        .setContentText("hola")
                        .setContentIntent(viewPendingIntent);



        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        not=notificationBuilder.build();
        notificationManager.notify(notificationId,not );
        startForeground(notificationId, not);

Der obige Code macht den Service für das Betriebssystem im Gegensatz zu einem normalen Dienst zu einer Priorität. Beispiele für einen Vordergrunddienst sind beispielsweise Musikspieler.

Mit diesem Code konnte ich die Stichprobenrate erhalten, die ich auch nach automatisch vom Bildschirm vom Bildschirm benötige.

Überprüfen Sie diese App. Wir haben die Frequenz der Stichprobenfrequenz bei 14-15 unabhängig vom Gerätemodell festgelegt https://market.android.com/details?id=singh.pal.ajeet&feature=search_result#?t=W251BGWSMSWXLDESINPBMDOLNBHBC5HAMVLDCJDSenden Sie uns für alle Assistenten an Entwickler.virtuoid@gmail.com

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top