Maison > Java > javaDidacticiel > Pourquoi suis-je incapable d'obtenir ma position actuelle à l'aide du fournisseur RÉSEAU d'Android ?

Pourquoi suis-je incapable d'obtenir ma position actuelle à l'aide du fournisseur RÉSEAU d'Android ?

DDD
Libérer: 2024-11-25 16:31:14
original
317 Les gens l'ont consulté

Why Am I Unable to Get My Current Location Using Android's NETWORK Provider?

Comment obtenir la position actuelle dans Android

Vous rencontrez des difficultés pour récupérer les coordonnées de votre position actuelle à l'aide du fournisseur RÉSEAU du système de localisation Android. Malgré la mise en œuvre de diverses classes existantes, vous ne parvenez toujours pas à obtenir les coordonnées actuelles.

Analyse du problème :

Le problème réside peut-être dans un concept fondamental qui vous manque. Voici quelques problèmes potentiels :

  • Autorisations de localisation : Assurez-vous d'avoir déclaré les autorisations de localisation nécessaires dans votre fichier AndroidManifest.xml. Vous aurez besoin des autorisations ACCESS_FINE_LOCATION et ACCESS_COARSE_LOCATION.
  • Fournisseur de localisation : Vérifiez que vous demandez correctement des mises à jour au fournisseur NETWORK. Le code doit explicitement demander des mises à jour de localisation à l'aide de LocationManager.NETWORK_PROVIDER.
  • LocationListener : L'implémentation de l'interface LocationListener et le remplacement de la méthode onLocationChanged sont essentiels pour gérer les mises à jour de localisation.

Code révisé :

Voici une version révisée de votre code qui résout les problèmes potentiels :

MainActivity.java :

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_FINE_LOCATION = 123;
    private LocationManager locationManager;
    private TextView text;

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

        text = (TextView) findViewById(R.id.texts);

        // Check and request location permission
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_FINE_LOCATION);
        } else {
            initLocationManager();
        }
    }

    private void initLocationManager() {
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // Request location updates from the NETWORK provider
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        }
    }

    private LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            if (location != null) {
                text.setText("Lat: " + location.getLatitude() + ", Lon: " + location.getLongitude());
            }
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }
    };

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_FINE_LOCATION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            initLocationManager();
        }
    }
}
Copier après la connexion

AndroidManifest.xml :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.locationtests">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>
Copier après la connexion

Ce code mis à jour résout les problèmes les plus courants liés à l'obtention de la position actuelle sur Android à l'aide du fournisseur NETWORK.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal