Question

Je dois recueillir des données accéléromètre de mon téléphone Android, donc je l'ai fait un petit programme pour le faire.

Après quelques tests, j'ai trouvé que mon taux d'accéléromètre Nexus S est toujours 50 valeurs par seconde lorsque le téléphone est actif, et 6 valeurs par seconde quand il est endormi (avec un PARTIAL_WAKE_LOCK), quel que soit le taux que je demande (NORMAL, UI, GAME ou FASTEST).

Je décide donc d'installer une application trouvée sur l'Internet qui teste le taux de l'accéléromètre: http://samoht.fr/tuto/accelerometers-frequency-on-android-with-code

Mais je suis la même « erreur ». Quel que soit le taux que je demande, il est toujours 50 valeurs par seconde lorsque le téléphone est actif

Je ne comprends pas pourquoi mon téléphone se comporte de cette façon. Est-ce un problème:

  • en rapport avec le Nexus S?
  • spécifique à mon téléphone?
  • lié ??à Android 4?

EDIT : Je l'ai testé le programme sur un autre Nexus S (Android 4), et j'ai le même problème. Il semble donc d'éliminer l'une des possibilités énumérées ci-dessus. Il n'est pas liée seulement à mon téléphone

Était-ce utile?

La solution

J'ai effectué des tests sur différents smartphones. Voici les résultats:

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

Notez que les tests ont été effectués à l'aide d'un verrou de réveil partiel. Sans elle, le Nexus S ne fournit aucune donnée du tout quand il dort.

Il y a aussi une liste utile des smartphones qui accéléromètres envoi (ou non) des données compatibles pendant le sommeil: http://www.saltwebsites.com/2012/android-accelerometers-screen-off

Autres conseils

Ne pas connecter votre téléphone à un PC via USB tout en prenant des données, car les données lors de la collecte est enregistrée dans la carte SD uniquement. Lorsque le téléphone est connecté à un PC via USB sans fichier peut être sauvegardé sur la carte SD.

Alors essayez de déconnecter l'USB tout en collectant les données.

Malheureusement, comme suggéré par d'autres réponses, le retard (ou le taux d'échantillonnage) que vous définissez est seulement une suggestion (pour le système) du minimum requis par votre application toutefois, cela peut changer radicalement en fonction d'autres applications en cours d'exécution ou votre entrée de l'appareil sur les modes d'économie d'énergie (éteindre cpu etc). Une façon je pouvais obtenir un peu bon taux d'échantillonnage était en enregistrant mes données d'un service, ce qui rend le service un service de premier plan et ayant une serrure électrique avec le drapeau PARTIAL_WAKE_LOCK.

Je mets le code dans ce point essentiel https://gist.github.com/julian-ramos/6ee7ad8a74ee4b442530

Ce point essentiel a le code beaucoup plus que vous avez besoin, mais juste faire attention aux deux méthodes suivantes

@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();
.....}

Le code ci-dessus empêche le système d'exploitation pour éteindre le CPU

Maintenant, pour faire de ce service un service de premier plan

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

Le code ci-dessus rend le service une priorité pour le système d'exploitation contrairement à un service normal. Des exemples d'un service de premier plan sont des lecteurs de musique, par exemple.

Avec ce code, j'ai été en mesure d'obtenir le taux d'échantillonnage dont j'ai besoin, même après le virage de la montre est hors de l'écran automatiquement.

vérifier l'application nous avons fréquence fixe échantillonnage à 14-15 indépendamment du modèle d'appareil https://market.android.com/details?id=singh.pal.ajeet&feature=search_result#?t=W251bGwsMSwxLDEsInNpbmdoLnBhbC5hamVldCJd pour tout courrier d'aide-nous à developer.virtuoid@gmail.com

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top