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