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