【发布时间】:2018-08-19 09:05:00
【问题描述】:
对于我的应用,我需要获取用户的位置,以便从服务器获取相应的数据。问题是我使用的代码在第一次打开时没有正确返回位置。重新启动应用程序后,它就可以正常工作了。我搜索了其他问题并发现,如果您使用 getLastKnownLocation 并且自上次重新启动后没有位置,它将返回 null。但是为什么重新启动应用程序时它会起作用?它在第一次打开时是否获取它,我怎样才能让它等到第一次打开时正确获取位置?
我的 MainActivity 的代码:
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);
} else {
progressBar.setVisibility(View.VISIBLE);
GPSClass gt = new GPSClass(getActivity().getApplicationContext());
Location location = gt.getLocation();
if (location == null) {
//Toast
} else {
lat = location.getLatitude();
lon = location.getLongitude();
}
new GetContacts().execute();
}
还有 GPSClass:
public class GPSClass implements LocationListener {
Context context;
public GPSClass(Context context) {
super();
this.context = context;
}
public Location getLocation(){
if (ContextCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED) {
Log.e("fist","error");
return null;
}
try {
LocationManager lm = (LocationManager) context.getSystemService(LOCATION_SERVICE);
boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (isGPSEnabled){
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000,10,this);
Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
return loc;
}else{
Log.e("sec","error");
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
【问题讨论】:
-
如何在 GPS 类中位置发生变化时通知我的 MainActivity?