android - FusedLocationProviderClient 不返回位置
问题描述
我正在使用FusedLocationProviderClient
单击按钮获取纬度和经度。但是当我单击按钮时,它什么也没有显示。只是应用程序会永久加载。任何人都可以告诉我我在代码中做错了什么吗?
这是代码:
public class MainActivity extends AppCompatActivity {
Button showLocation;
TextView getLat, getLong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showLocation = findViewById(R.id.btnShowLocation);
getLat = findViewById(R.id.getLat);
getLong = findViewById(R.id.getLong);
}
public void getlocation(View v) {
final ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Getting Location");
progressDialog.setCancelable(false);
progressDialog.show();
FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if(location!=null)
{
String lati=String.valueOf(location.getLatitude());
getLat.setText(lati);
String longi=String.valueOf(location.getLongitude());
getLat.setText(longi);
Toast.makeText(MainActivity.this,"Location Found !!!",Toast.LENGTH_LONG).show();
progressDialog.cancel();
}
else
Toast.makeText(MainActivity.this,"Please Enable GPS And Internet !!!",Toast.LENGTH_LONG).show();
}
});
}
}
解决方案
我在我的一个 Kotlin 项目中使用了 FusedLocation,我将在下面发布方法。
确保您的位置服务已启用,并且已经向用户询问了访问位置的权限,否则无法检测到最后一个位置。
fun getLocation(): Task<Location>? {
val mFusedLocationProviderClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(dashboardActivity)
if (ActivityCompat.checkSelfPermission(dashboardActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(dashboardActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
}
val location = mFusedLocationProviderClient.lastLocation
location.addOnCompleteListener { task ->
if (task.isSuccessful) {
val currentLocation = task.result
if (currentLocation != null) {
latitude = currentLocation.latitude
longitude = currentLocation.longitude
dashboardActivity.getLatLong(latitude.toString(), longitude.toString()) //this methods calls the collector geo-location service
} else {
val builder = AlertDialog.Builder(dashboardActivity)
builder.setTitle("Location On")
builder.setPositiveButton("Yes") { dialog, which ->
val viewIntent = Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)
dashboardActivity.startActivity(viewIntent)
}
builder.setNegativeButton("No") { dialog, which ->
Toast.makeText(dashboardActivity, "Please enable location service", Toast.LENGTH_SHORT).show()
}
val dialog: AlertDialog = builder.create()
dialog.show()
}
}
}
return location
}
我认为这可能是问题所在,而不是使用addOnSuccessListener()
i have instead used 。addOnCompleteListener()
推荐阅读
- ios - iOS App 仅在具有分段错误的发布模式下崩溃
- python - PyQt,在编辑期间不要更改 qtablewidgetitem 字体
- r - 用新值列表替换数据框中的值列表的最简单方法
- visual-studio - MSBuild 中的嵌套目标批处理?
- javascript - SetInterval 每次调用 2 次
- php - 将角色与用户关联以建立一对多关系时出错
- python - 在自定义管理端添加用户功能 - Django
- angular - 为什么 http get attr [params] 需要是 {[param: string]: string | 细绳[]}?
- javascript - 如何根据不同的键过滤对象并将结果保存到数组中
- swift - 当用户更改设备设置选项中的位置设置时,SwiftUI 会刷新应用程序