[JAVA] Accélérez l'acquisition d'informations de localisation sur Android

Aperçu

Concernant l 'article que j'ai écrit l'autre jour, j'ai utilisé LocationManager pour obtenir les informations de localisation. À ce moment-là, la vitesse lente est devenue un problème, je vais donc écrire un article sur la façon dont je pourrais l'améliorer.

La première implémentation

python



private void callRequestLocationUpdates()
{
    checkPermission();
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, listener);
}

J'ai utilisé LocationManager.requestLocationUpdates () pour obtenir les informations de localisation sur Android, mais au début, je l'ai implémentée comme ci-dessus. Cependant, il semble y avoir une méthode autre que le GPS pour acquérir des informations de localisation avec LocationManager, et j'ai trouvé qu'elle est contrôlée par le premier argument de requestLocationUpdates (). Il semble que le premier argument s'appelle "propider", mais si vous vous référez à la documentation décrite dans la référence, vous pouvez voir qu'il y a environ 3 constantes avec le nom "PROVIDER".

・ GPS_PROVIDER · FOURNISSEUR DE RÉSEAU ・ PASSIVE_PROVIDER

Étant donné qu'un seul FOURNISSEUR peut être défini dans l'argument de requestLocationUpdates (), j'ai pensé que je devais sélectionner l'un des trois ci-dessus au début, mais en fait, dans LocationManager, requestLocationUpdates () est défini dans les trois PROVIDER ci-dessus. Il est également possible de fonctionner en parallèle.

Mise en œuvre améliorée

Pour l'exécution parallèle de requestLocationUpdates (), je me suis référé au site décrit pour référence (développement Android | Comment obtenir des informations de localisation en parallèle avec plusieurs fournisseurs). Il y avait la description suivante.

Il est transmis à requestLocationUpdatesde pour démarrer la mesure, mais si vous l'appelez pour le fournisseur requis, la mesure sera effectuée en parallèle.

De plus, il y avait la description suivante.

Si tous les fournisseurs utilisent le même écouteur, removeUpdates arrêtera de mesurer pour tous les fournisseurs une fois appelés.

Oh! c'est! J'ai pensé. En d'autres termes, je pensais que si vous le tournez avec une instruction for et laissez tout PROVIDER effectuer un traitement parallèle, et si vous pouvez d'abord acquérir les informations de position, puis effectuer un traitement ultérieur, vous pouvez vous attendre à une vitesse plus élevée pour l'ensemble de l'application!

Et le code qui a été amélioré en se référant au site ci-dessus est le suivant.

python


private void callRequestLocationUpdates()
{
    //Viser une vitesse élevée en tournant le traitement avec plusieurs fournisseurs
    List<String> providers = mLocationManager.getProviders(true);
    checkPermission();
    for (String provider : providers) {
        mLocationManager.requestLocationUpdates(provider, 500, 1, listener);
    }
}

LocationListener. Est implémenté.


@Override
public synchronized void onLocationChanged(Location location) {
    //Acquisition des informations de localisation
    lat = location.getLatitude();
    lng = location.getLongitude();
    if(getActiveFlg() == 0){
        //Définissez un indicateur dans le premier processus afin qu'il ne soit pas exécuté après le deuxième processus
        setActiveFlg(1);
        //Traitement ultérieur
        doSomething(lat, lng);
    }
}

Avec cela, le traitement suivant sera déclenché uniquement par onLocationChanged () qui a été démarré en premier, et il ne sera pas déclenché à partir de la deuxième fois. Si vous ajoutez également synchronisé, vous pouvez être assuré qu'aucun autre thread n'interrompra l'instruction if avant setActiveFlg (1).

En conséquence, le traitement ultérieur ne peut être effectué qu'avec PROVIDER, qui a pu acquérir les informations de position à la vitesse la plus rapide, et par conséquent, l'acquisition d'informations de position pourrait être accélérée.

référence: Obtenir les informations de localisation Android LocationManager Développement Android | Comment obtenir des informations de localisation en parallèle avec plusieurs fournisseurs

Recommended Posts

Accélérez l'acquisition d'informations de localisation sur Android
[Android] Notes sur xml
Obtenir des informations de localisation Android
Personnaliser la vue de liste sur Android
Bibliothèque de transmission en plusieurs parties sur Android
Utiliser la communication série sur Android
Développement d'applications ROS sur Android
Configurer Gitolite sur CentOS 7
Ubuntu sur la vitesse de construction de Windows
Utiliser le code natif sur Android
Configurer ansible-playbook sur Ubuntu 20.04