Obtenez des données de capteur de pas en arrière-plan et stockez-les dans SharedPreference / SQLite

Impair:

J'ai essayé de nombreuses façons d'obtenir des données de capteur en arrière-plan et de stocker la valeur dans une préférence partagée ou SQLite, mais aucune d'entre elles ne fonctionne. Je pense que c'est à cause des restrictions de fond Android Oreo.

j'ai essayé

  • Gestionnaire d'alarme avec récepteur de diffusion
  • Gestionnaire d'alarme avec service

et maintenant j'utilise le WorkManager. Cela ne fonctionne pas vraiment non plus. Qu'est-ce que je fais mal? Est-il impossible d'obtenir les données des capteurs en arrière-plan maintenant? Existe-t-il une autre solution alternative?

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    localDatabaseHelper = new LocalDatabaseHelper(getApplicationContext());
    sharedPreferences = getSharedPreferences("TEST STORAGE", MODE_PRIVATE);

    sensorManager = (SensorManager) getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
    stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

    WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag("Update-Shared-Preference");
    WorkRequest updateSharedPreference = new OneTimeWorkRequest.Builder(UpdateStepWork.class)
            .addTag("Update-Shared-Preference")
            .build();

    WorkManager.getInstance(getApplicationContext()).enqueue(updateSharedPreference);
}

Travail

public class UpdateStepWork extends Worker implements SensorEventListener {

private SharedPreferences sharedPreferences;
private SensorManager sensorManager;
private Sensor stepSensor;
private LocalDatabaseHelper localDatabase;

public UpdateStepWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
    super(context, workerParams);
}

@NonNull
@Override
public Result doWork() {

    Log.i("WORK", "STARTED");
    sharedPreferences = getApplicationContext().getSharedPreferences("TEST STORAGE", Context.MODE_PRIVATE);
    sensorManager = (SensorManager) getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
    stepSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
    localDatabase = new LocalDatabaseHelper(getApplicationContext());

    WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag("Update-Shared-Preference");
    WorkRequest updateSharedPreference = new OneTimeWorkRequest.Builder(UpdateStepWork.class)
            .setInitialDelay(5, TimeUnit.SECONDS)
            .addTag("Update-Shared-Preference")
            .build();

    WorkManager.getInstance(getApplicationContext()).enqueue(updateSharedPreference);

    sensorManager.unregisterListener(this, stepSensor);
    if(sensorManager.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_NORMAL)){
        return Worker.Result.success();
    }else
        return Worker.Result.failure();
}



@Override
public void onSensorChanged(SensorEvent event) {
    int steps = (int) event.values[0];

    Log.i("Steps from sensor", steps + "");

    if(sharedPreferences.edit().putInt("steps", steps).commit()){
        Log.i("Shared Preference", "SUCCESS STORED: " + steps);

        if(localDatabase.updateDailyData(steps)){
            Log.i("LOCAL DATABASE", "SUCCESS AT " + getCurrentTimeStamp());
            Cursor data = localDatabase.getData();

            while (data.moveToNext()) {
                Log.i("DATA", data.getString(0) + "    " + data.getInt(1));
            }
        }

    }else{
        Log.i("Shared Preference", "FAILED STORED: " + steps);
    }
    sensorManager.unregisterListener(this, stepSensor);
    sensorManager = null;
}
Chrystian:

L'approche typique pour collecter les données des capteurs en arrière-plan utilise un service de premier plan .

Les SharedPreferences ne sont pas un moyen idéal pour stocker les données des capteurs. Je vous recommande de stocker les données du capteur dans un fichier .csv ou une base de données.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Obtenez des données de firebase et stockez-les dans une variable javascript

Obtenez les valeurs des champs de saisie dynamiques et stockez-les dans la base de données avec PHP

Existe-t-il un moyen de surveiller les données du capteur en arrière-plan dans le nom de code?

Comment collecter des données de capteur dans Rust et les rendre interrogeables / disponibles en Python?

Obtenez la réponse de l'API et stockez les données dans un tableau

Obtenez des fichiers jave de manière récursive et stockez-les dans la liste des tableaux

Connectez-vous à la base de données mySQL, obtenez des valeurs aléatoires d'une certaine colonne et stockez-les dans un tableau PHP

Analyse Android: obtenez des chaînes de parsequeryadapter et stockez-les dans un ArrayList

Android: existe-t-il un moyen de collecter des données à partir du capteur de mouvement significatif lorsque l'application est en arrière-plan?

Obtenez tous les attributs de données d'un élément et stockez-les dans JSON

Obtenez les données d'entrée à partir de textarea de HTML et stockez ces valeurs dans un tableau

Swift : obtenez les coordonnées de l'utilisateur actuel et stockez-les dans une variable

Verrouillage des données de base dans les threads d'arrière-plan

iOS - Swift: récupérer les données de la base de données dans le thread principal, pas en arrière-plan

Obtenez plusieurs données sélectionnées à partir de la vue du recycleur et stockez les données dans la base de données

Les entrées de base de données ajoutées dans la tâche en arrière-plan n'apparaissent pas sur heroku

Créez une base de données locale dans winform et récupérez les données du serveur en arrière-plan

Insérer des données en vrac dans la base de données en arrière-plan en PHP

Obtenez les données de la semaine et du mois en cours dans la base de données des chambres

Perte de données du capteur portable Tizen en arrière-plan après la désactivation du wifi

La mise à jour des données de localisation sur le serveur ne fonctionne pas en utilisant la géolocalisation en arrière-plan dans ionic 3

Essayer d'obtenir des données de capteur en temps réel de python dans html en utilisant Flask et jquery sans actualiser la page entière

Stockez les identifiants comme int dans la base de données et obtenez-les sous forme de HashID à l'aide de Dapper

Divisez de manière dynamique et conditionnelle un ensemble de données en plusieurs tableaux ou stockez des informations concernant les emplacements fractionnés

La tâche d'arrière-plan Orchard ne persiste pas les PartRecords dans la base de données

SQL Server - Obtenez des ID distincts à partir de 2 colonnes et stockez-les dans une table coulmn

Obtenez des attributs de demande et stockez-les pour une utilisation ultérieure n'importe où dans l'application

Obtenez des boutons et stockez-les dans un tableau

Django Rest Framework exporte des données csv à partir de modèles en arrière-plan

TOP liste

  1. 1

    Filtrer le dataframe basé sur plusieurs colonnes d'un autre dataframe

  2. 2

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  3. 3

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  4. 4

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  7. 7

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  8. 8

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  9. 9

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  10. 10

    comment afficher un bouton au-dessus d'un autre élément ?

  11. 11

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  12. 12

    Filtrer les données en fonction des conditions d'une trame de données

  13. 13

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  14. 14

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  15. 15

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  16. 16

    Pourquoi Phantomjs ne fonctionne pas avec ce site ?

  17. 17

    Stop jQuery execution after one time execution

  18. 18

    Concaténer des variables dans ansible

  19. 19

    Comment calculer la probabilité du graphique de densité?

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

chaudétiquette

Archive