[JAVA] Obtenir des informations de localisation Android

Acquisition facile des informations de localisation sur Android (GPS)

Désormais, je vais faire une application Android pour étudier. Puisqu'il existe une fonction pour utiliser le journal de vie, j'ai essayé de savoir comment acquérir facilement les informations de localisation. Étant donné que l'application réelle acquiert des informations de localisation pendant une longue période, il est nécessaire de configurer et d'exécuter le service. Nous étudierons le service la prochaine fois.

Paramètre d'autorisation

Il existe deux types d'autorisations, qui peuvent être divisées en acquisition GPS et acquisition réseau.

AndroidManifest.xml


<!--Obtenu à partir du GPS-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!--Obtenu à partir du réseau-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

GPS: des informations de position très précises peuvent être obtenues, mais la consommation d'énergie est élevée. Ne peut pas être utilisé à l'intérieur. Réseau: les informations de localisation sont moins précises, mais consomment moins d'énergie. Peut être obtenu à l'intérieur

Les caractéristiques générales sont telles que décrites ci-dessus. Il est nécessaire de l'utiliser correctement selon le but de l'application.

MainActivity.java


package yong.testproject;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity implements LocationListener {

    private LocationManager mLocationManager;
    private String bestProvider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLocationManager();
    }

    @Override
    protected void onStart() {
        super.onStart();

        locationStart();
    }

    @Override
    protected void onStop() {
        super.onStop();

        locationStop();
    }

    private void initLocationManager() {
        //Génération d'instance
        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        //Paramètre avancé
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setPowerRequirement(Criteria.POWER_HIGH);
        criteria.setSpeedRequired(false);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
        criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);
        bestProvider = mLocationManager.getBestProvider(criteria, true);
    }

    private void checkPermission() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            //Obtenir l'autorisation pour les autorisations
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1000);
        }
    }

    private void locationStart() {
        checkPermission();
        mLocationManager.requestLocationUpdates(bestProvider, 60000, 3, this);
    }

    private void locationStop() {
        mLocationManager.removeUpdates(this);
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.d("DEBUG", "called onLocationChanged");
        Log.d("DEBUG", "lat : " + location.getLatitude());
        Log.d("DEBUG", "lon : " + location.getLongitude());
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.d("DEBUG", "called onStatusChanged");
        switch (status) {
            case LocationProvider.AVAILABLE:
                Log.d("DEBUG", "AVAILABLE");
                break;
            case LocationProvider.OUT_OF_SERVICE:
                Log.d("DEBUG", "OUT_OF_SERVICE");
                break;
            case LocationProvider.TEMPORARILY_UNAVAILABLE:
                Log.d("DEBUG", "TEMPORARILY_UNAVAILABLE");
                break;
            default:
                Log.d("DEBUG", "DEFAULT");
                break;
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
        Log.d("DEBUG", "called onProviderDisabled");
    }

    @Override
    public void onProviderEnabled(String provider) {
        Log.d("DEBUG", "called onProviderEnabled");
    }
}

Point de mise en œuvre

LocationManager Créez une instance de la classe LocationManager, définissez le fournisseur et obtenez les informations de localisation. Le début de l'acquisition est LocationManager.requestLocationUpdates, Pour arrêter l'acquisition, utilisez LocationManager.removeUpdates.

Criteria Définissez les paramètres détaillés pour le fournisseur. ・ Criteria.setSpeedRequired (faux) → Fonction de calcul de la vitesse de Location Manager. ne pas utiliser. ・ Criteria.setAltitudeRequired (faux) → Informations avancées. ne pas utiliser. ・ Criteria.setBearingRequired (faux) → Informations de direction pointées par le terminal. ne pas utiliser. ・ Criteria.setCostAllowed (vrai) → Améliorez la précision en échangeant des données avec la station de base. Il est appelé coût autorisé car la communication de données augmente en raison de l'échange. Si vous souhaitez l'utiliser, vous pouvez l'implémenter en demandant le consentement de l'utilisateur.

LocationListener Configurez l'auditeur pour recevoir les informations de localisation. Si les informations d'emplacement changent, la méthode de rappel onLocationChanged est appelée. LocationManager.request Vous pouvez définir l'intervalle minimum d'appel avec l'argument défini lors du démarrage de l'acquisition avec LocationUpdates. Cette fois, minTime est réglé sur 60000 (ms) et minDistance est réglé sur 3 (m).

Résumé

En ce qui concerne les paramètres détaillés de Critères, j'étudierai plus en détail tout en faisant une demande à l'avenir. Je voudrais pouvoir effectuer des réglages flexibles en fonction de l'objectif de l'application, tels que la consommation d'énergie et la précision des informations de localisation.

Je me suis référé au site suivant. GPS (acquisition d'informations de localisation) sur Android [Android] Créez une application qui acquiert des informations de localisation avec le GPS [Technologie de suivi précis des informations de localisation sur Android](https://medium.com/location-tracking-tech/%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0% B1% E3% 82% 92% E6% AD% A3% E7% A2% BA% E3% 81% AB% E3% 83% 88% E3% 83% A9% E3% 83% 83% E3% 82% AD% E3% 83% B3% E3% 82% B0% E3% 81% 99% E3% 82% 8B% E6% 8A% 80% E8% A1% 93-dans-android-% E7% AC% AC1% E5% 9B % 9E-% E3% 83% 90% E3% 83% 83% E3% 82% AF% E3% 82% B0% E3% 83% A9% E3% 83% B3% E3% 83% 89% E3% 81% A7% E3% 81% AE% E4% BD% 8D% E7% BD% AE% E6% 83% 85% E5% A0% B1% E3% 83% 88% E3% 83% A9% E3% 83% 83% E3% 82% AD% E3% 83% B3% E3% 82% B0% E3% 82% 92% E5% 8F% AF% E8% 83% BD% E3% 81% AB% E3% 81% 99% E3% 82% 8B% E3% 82% A2% E3% 83% BC% E3% 82% AD% E3% 83% 86% E3% 82% AF% E3% 83% 81% E3% 83% A3-6bb36559a977)

Merci beaucoup.

Recommended Posts

Obtenir des informations de localisation Android
Obtenez rapidement des informations de localisation
Obtenez des informations de localisation avec Rails et triez par ordre croissant
Obtenir des informations EXIF en Java
Échantillon pour obtenir le WiFi, la balise Bluetooth, les informations du capteur sur Android
[Android] Obtenez la date du lundi
Obtenez la couverture du code JUnit sur Android.
OkHttp3 (GET, POST) dans Android Studio
Acquisition des informations de localisation à l'aide de FusedLocationProviderClient
Accélérez l'acquisition d'informations de localisation sur Android
[Java] Obtenir des informations sur les balises à partir de fichiers musicaux
Obtenez des informations de compte en accédant à l'API de Strava