我试图使用模拟器返回当前位置的纬度和经度。我收到一个错误,我需要允许ACCESS_FINE_LOCATION,即使这已经在我的清单文件中。有谁知道为什么下面的代码不能用于它,即使它在我的清单文件中?
提前致谢!
还有一个版本,我尝试使用fusedLocationClient,但这没有做任何我认为这是因为我的位置没有改变。
此代码的目标是以纬度和经度的形式显示当前位置作为吐司。
public void displayCurrentLocation(View view){
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();
Toast.makeText(getApplicationContext(),"Latitude:" + latitude + " Longitude:" + longitude,Toast.LENGTH_SHORT);
// fusedLocationClient.getLastLocation()
// .addOnSuccessListener(this, new OnSuccessListener<Location>() {
// @Override
// public void onSuccess(Location location) {
// double longitude = location.getLongitude();
// double latitude = location.getLatitude();
// Toast.makeText(getApplicationContext(),"Latitude:" + latitude + " Longitude:" + longitude,Toast.LENGTH_SHORT);
// if (location != null) {
// // Logic to handle location object
// }
// }
// });
}
如果您的应用需要危险权限,则每次执行需要该权限的操作时,都必须检查是否拥有该权限。从Android 6.0(API级别23)开始,用户可以随时撤消任何应用的权限,即使该应用针对较低的API级别也是如此。
有关更多信息,请参阅Docs。
这意味着每次用户使用该功能时都应该询问您的权限。
这是一个例子
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED) {
//here you do your code for getting latLng
}
else {
ActivityCompat.requestPermissions(this, new String[] {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION },
TAG_CODE_PERMISSION_LOCATION);
}