[JAVA] Holen Sie sich Android-Standortinformationen

Einfache Erfassung von Standortinformationen auf Android (GPS)

Von nun an werde ich eine Android-Anwendung zum Lernen erstellen. Da es eine Funktion zum Verwenden des Lebensprotokolls gibt, habe ich versucht herauszufinden, wie die Standortinformationen einfach abgerufen werden können. Da die eigentliche Anwendung lange Zeit Standortinformationen abruft, muss der Dienst eingerichtet und ausgeführt werden. Wir werden den Service beim nächsten Mal untersuchen.

Berechtigungseinstellung

Es gibt zwei Arten von Berechtigungen, die in GPS-Erfassung und Netzwerkerfassung unterteilt werden können.

AndroidManifest.xml


<!--Von GPS erhalten-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!--Vom Netzwerk erhalten-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

GPS: Es können hochgenaue Positionsinformationen erhalten werden, aber der Stromverbrauch ist hoch. Kann nicht in Innenräumen verwendet werden. Netzwerk: Standortinformationen sind weniger genau, verbrauchen jedoch weniger Strom. Kann drinnen erhalten werden

Die allgemeinen Merkmale sind wie oben beschrieben. Es ist notwendig, es entsprechend dem Zweck der Anwendung richtig zu verwenden.

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() {
        //Instanzgenerierung
        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        //Erweiterte Einstellung
        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) {
            //Berechtigung für Berechtigungen einholen
            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");
    }
}

Implementierungspunkt

LocationManager Erstellen Sie eine Instanz der LocationManager-Klasse, legen Sie den Anbieter fest und rufen Sie die Standortinformationen ab. Der Erfassungsstart ist LocationManager.requestLocationUpdates, Verwenden Sie LocationManager.removeUpdates, um die Erfassung zu stoppen.

Criteria Nehmen Sie detaillierte Einstellungen für den Anbieter vor. ・ Criteria.setSpeedRequired (false) → Location Manager Geschwindigkeitsberechnungsfunktion. verwende nicht. ・ Criteria.setAltitudeRequired (false) → Erweiterte Informationen. verwende nicht. ・ Criteria.setBearingRequired (false) → Richtungsinformationen, auf die das Terminal zeigt. verwende nicht. ・ Criteria.setCostAllowed (true) → Verbessern Sie die Genauigkeit durch Datenaustausch mit der Basisstation. Es wird als Kosten zulässig bezeichnet, da die Datenkommunikation aufgrund des Austauschs zunimmt. Wenn Sie es verwenden möchten, können Sie es implementieren und den Benutzer um Zustimmung bitten.

LocationListener Stellen Sie den Listener so ein, dass Standortinformationen empfangen werden. Wenn sich die Standortinformationen ändern, wird die Rückrufmethode onLocationChanged aufgerufen. LocationManager.request Sie können das Mindestintervall für den Aufruf mit dem Argument festlegen, das beim Starten der Erfassung mit LocationUpdates festgelegt wurde. Diesmal ist minTime auf 60000 (ms) und minDistance auf 3 (m) eingestellt.

Zusammenfassung

In Bezug auf die detaillierten Einstellungen von Kriterien werde ich mehr untersuchen, während ich in Zukunft tatsächlich einen Antrag stelle. Ich möchte in der Lage sein, flexible Einstellungen entsprechend dem Zweck der Anwendung vorzunehmen, wie z. B. Stromverbrauch und Genauigkeit der Standortinformationen.

Ich habe auf die folgende Seite verwiesen. GPS (Standortinformationserfassung) unter Android [Android] Erstellen Sie eine App, die Standortinformationen mit GPS erfasst [Technologie zum genauen Verfolgen von Standortinformationen in 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-in-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)

Vielen Dank.

Recommended Posts

Holen Sie sich Android-Standortinformationen
Erhalten Sie schnell Standortinformationen
Holen Sie sich Standortinformationen mit Rails und sortieren Sie in aufsteigender Reihenfolge
Holen Sie sich EXIF-Informationen in Java
Beispiel, um WiFi, Bluetooth-Beacon und Sensorinformationen auf Android zu erhalten
[Android] Holen Sie sich das Datum von Montag
Erhalten Sie JUnit-Codeabdeckung für Android.
OkHttp3 (GET, POST) in Android Studio
Erfassung von Standortinformationen mit FusedLocationProviderClient
Beschleunigen Sie die Erfassung von Standortinformationen unter Android
[Java] Tag-Informationen aus Musikdateien abrufen
Erhalten Sie Kontoinformationen, indem Sie auf die Strava-API zugreifen