Android studio 不检查 mFusedLocationProviderClient.getLastLocation().addOnSuccessListener 并返回当前位置 null
Posted
技术标签:
【中文标题】Android studio 不检查 mFusedLocationProviderClient.getLastLocation().addOnSuccessListener 并返回当前位置 null【英文标题】:Android studio does not check mFusedLocationProviderClient.getLastLocation().addOnSuccessListener and returns current location null 【发布时间】:2019-02-15 20:10:36 【问题描述】:我正在尝试从我的应用中获取更新后的位置。但是我的应用程序不会检查此代码块
public void onSuccess(Location location) 内 mFusedLocationProviderClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener() 并返回空位置。即使我的设备位置已打开,地图也会显示我的位置。我用于访问更新位置的代码如下:
protected void onCreate(Bundle savedInstanceState)
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
Toast.makeText(this, "Map is ready", Toast.LENGTH_SHORT).show();
if (mLocationPermissionGranted)
getDeviceLocation();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED)
return;
mMap.setMyLocationEnabled(true);
private void getDeviceLocation()
try
if(mLocationPermissionGranted) //true in my case
mFusedLocationProviderClient.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)
moveCamera(new LatLng(location.getLatitude(),location.getLongitude()),17);
// mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),location.getLongitude()),12),2000,null);
else
Toast.makeText(MapsActivity.this, "Unable to get current location", Toast.LENGTH_SHORT).show();
);
catch (SecurityException ex)
我在堆栈跟踪中遇到以下异常
09-11 15:12:14.525 5864-5864/? E/Zygote: v2
09-11 15:12:14.530 5864-5864/? E/Zygote: accessInfo : 0
09-11 15:12:27.333 5864-5864/com.example.muzammil.maptestingproject E/BoostFramework: BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
09-11 15:12:39.327 5864-5864/com.example.muzammil.maptestingproject E/art: The String#value field is not present on android versions >= 6.0
其他一切都是正确的,包括 清单权限 和 gradle 依赖项。可能是任何机构帮助我解决我的问题。提前致谢。
【问题讨论】:
getLastLocation()
可能返回 null 如果位置不可用(这种情况应该很少发生),将返回 null。
【参考方案1】:
如果至少有一个客户端连接到 Fused Location Provider,它将提供位置。如果客户端连接,它将立即尝试获取位置。如果您的活动是第一个连接的客户端,并且您致电getLastLocation()
,则可能没有足够的时间让第一个位置进入。
getLastLocation()
适用于立即需要位置或根本无法使用的位置。如果您真的想等待某个位置,最好使用requestLocationUpdates()
并等待回调,而不是忙于在线程中等待。
这里是使用requestLocationUpdates()
获取location
的方法
LocationCallback locationCallback;
LocationRequest locationRequest;
FusedLocationProviderClient fusedLocationClient;
void getLocation()
locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(30 * 1000)
.setFastestInterval(5 * 1000);
locationCallback = new LocationCallback()
@Override
public void onLocationResult(LocationResult locationResult)
super.onLocationResult(locationResult);
//Location received
;
fusedLocationClient = LocationServices.getFusedLocationProviderClient(getApplicationContext());
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
return;
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null);
别忘了删除在onStop
或onDestroy
中更新的位置
fusedLocationClient?.removeLocationUpdates(locationCallback)
【讨论】:
非常感谢您的回答,问题已经解决了。以上是关于Android studio 不检查 mFusedLocationProviderClient.getLastLocation().addOnSuccessListener 并返回当前位置 null的主要内容,如果未能解决你的问题,请参考以下文章
Android studio 不检查 mFusedLocationProviderClient.getLastLocation().addOnSuccessListener 并返回当前位置 null
在 Android Studio 上使用 Java 检查实时数据库上的重复数据