首页 >Java >java教程 >为什么我无法使用 Android 的网络提供商获取我的当前位置?

为什么我无法使用 Android 的网络提供商获取我的当前位置?

DDD
DDD原创
2024-11-25 16:31:14239浏览

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

如何在 Android 中获取当前位置

您在使用 Android 位置系统的 NETWORK 提供程序检索当前位置坐标时遇到问题。尽管实现了各种现有的类,但您仍然无法获取当前坐标。

问题分析:

问题可能在于您缺少一个基本概念。以下是一些潜在的问题:

  • 位置权限:确保您已在 AndroidManifest.xml 文件中声明必要的位置权限。您将需要 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 权限。
  • 位置提供商:验证您是否正确地从网络提供商请求更新。代码应使用 LocationManager.NETWORK_PROVIDER 显式请求位置更新。
  • LocationListener: 实现 LocationListener 接口并重写 onLocationChanged 方法对于处理位置更新至关重要。

已修订代码:

这是代码的修订版本,可解决潜在的问题问题:

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>

此更新的代码解决了与使用网络提供程序在 Android 中获取当前位置相关的最常见问题。

以上是为什么我无法使用 Android 的网络提供商获取我的当前位置?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn