【问题标题】:LocationListener not fetching current location of userLocationListener 未获取用户的当前位置
【发布时间】:2019-07-05 11:29:27
【问题描述】:

我正在尝试使用 LocationManager 和 LocationListener 获取用户的当前位置。但没有获得任何价值。

下面是我在 Java 中使用的代码:

  // activity is implementing LocationListener
  private LocationManager locationManager;
  // in onCreate() method.

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
      requestLocationPermission();
      return;
    }
    else {
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    }

    //outside onCreate()
    @Override
    public void onLocationChanged(Location location) {
        double longitude =  location.getLongitude();
        double latitude =  location.getLatitude();
        NavProfileLocation.setText(String.valueOf(longitude)+" AND "+String.valueOf(latitude));
        Toast.makeText(MainActivity.this,String.valueOf(longitude)+" AND "+String.valueOf(latitude),Toast.LENGTH_LONG).show();

    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(intent);
    }

我想使用当前用户的 GPS 获取纬度和经度。

【问题讨论】:

  • 日志有错误吗?你检查权限了吗?
  • 是的,我检查了。用户已授予所有权限。
  • 您的具体问题是什么?是否调用了 onLocationChanged?
  • @RajatMehra 没有。不叫。这是主要问题

标签: java android location locationmanager


【解决方案1】:

再添加一个权限:

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

来自 android doc api 的最新更新: 检查网络和位置提供商。


private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}



fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

【讨论】:

  • 我正在使用 minSDK 16 和 targetSDK 28
  • 好的,现在尝试将一些小变体与版本结合起来:编译“com.google.android.gms:play-services-location:11.0.1”。在这一行尝试一些其他版本...也在清单中提供
  • 好,target28 最好一直保留到更高的版本号。
猜你喜欢
  • 2011-07-20
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2022-01-18
相关资源
最近更新 更多