Rumah  >  Artikel  >  Java  >  Mengapa Saya Tidak Dapat Mendapatkan Lokasi Semasa Saya Menggunakan Pembekal NETWORK Android?

Mengapa Saya Tidak Dapat Mendapatkan Lokasi Semasa Saya Menggunakan Pembekal NETWORK Android?

DDD
DDDasal
2024-11-25 16:31:14219semak imbas

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

Cara Mendapatkan Lokasi Semasa dalam Android

Anda menghadapi masalah mendapatkan semula koordinat kedudukan semasa anda menggunakan pembekal NETWORK sistem lokasi Android. Walaupun melaksanakan pelbagai kelas sedia ada, anda masih tidak dapat memperoleh koordinat semasa.

Analisis Masalah:

Isunya mungkin terletak pada konsep asas yang anda tiada. Berikut ialah beberapa masalah yang mungkin berlaku:

  • Kebenaran Lokasi: Pastikan anda telah mengisytiharkan kebenaran lokasi yang diperlukan dalam fail AndroidManifest.xml anda. Anda memerlukan kebenaran ACCESS_FINE_LOCATION dan ACCESS_COARSE_LOCATION.
  • Pembekal Lokasi: Sahkan bahawa anda meminta kemas kini dengan betul daripada pembekal NETWORK. Kod tersebut harus secara eksplisit meminta kemas kini lokasi menggunakan LocationManager.NETWORK_PROVIDER.
  • LocationListener: Melaksanakan antara muka LocationListener dan mengatasi kaedah onLocationChanged adalah penting untuk mengendalikan kemas kini lokasi.

Disemak Kod:

Berikut ialah versi semakan kod anda yang menangani masalah yang mungkin berlaku:

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();
        }
    }
}

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>

Kod yang dikemas kini ini menangani isu paling biasa yang berkaitan dengan mendapatkan lokasi semasa dalam Android menggunakan pembekal NETWORK.

Atas ialah kandungan terperinci Mengapa Saya Tidak Dapat Mendapatkan Lokasi Semasa Saya Menggunakan Pembekal NETWORK Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn