requestLocationUpdates() 花费太多时间或根本不起作用
requestLocationUpdates() takes too much time OR it does not works at all
我在 Android 应用程序的 Service
中使用了 requestLocationUpdates
方法,以便在我的设备位置发生变化时获取更新。我已经设置了 minTime = 0
但是这个 requestLocationUpdates
方法在很长时间的延迟(即 10 到 15 分钟,甚至更长时间)后给出更新。有时当我 运行 我的应用程序 requestLocationUpdates
方法根本不提供任何更新。很少(非常罕见)这种 requestLocationUpdates
方法的行为符合预期(持续更新,延迟为 0 秒)。那么可能是什么问题呢?我如何才能在每次 运行 我的应用程序时持续获得更新?
HelloService.java
public class HelloService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
new Handler(getMainLooper()).post(new Runnable() {
@Override
public void run() {
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
else {
manager.requestLocationUpdates("gps", 0, 0, new LocationDetector());
Toast.makeText(MainActivity.ctx, "Service Started...", Toast.LENGTH_LONG).show();
}
}
});
}
}).start();
return Service.START_STICKY;
}
}
LocationDetector.java
public class LocationDetector implements LocationListener {
@Override
public void onLocationChanged(Location location) {
/*I have used here Log.e instead of Log.d in order to get the output in clear red message that is easily readable*/
Log.e("GPS: ", location.getLatitude()+ ", " +location.getLongitude(), new Exception());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
}
我尝试了你的整个代码,在我的笔记本电脑上创建了新项目,并在我的 phone 上 运行。
结果:它工作正常,我的 phone 上的 GPS TTF 几乎是 15 秒。
您尝试过其他设备吗?
gps 图标呢?出现了,消失了?
并尝试融合位置提供商,看看会发生什么,link
我在 Android 应用程序的 Service
中使用了 requestLocationUpdates
方法,以便在我的设备位置发生变化时获取更新。我已经设置了 minTime = 0
但是这个 requestLocationUpdates
方法在很长时间的延迟(即 10 到 15 分钟,甚至更长时间)后给出更新。有时当我 运行 我的应用程序 requestLocationUpdates
方法根本不提供任何更新。很少(非常罕见)这种 requestLocationUpdates
方法的行为符合预期(持续更新,延迟为 0 秒)。那么可能是什么问题呢?我如何才能在每次 运行 我的应用程序时持续获得更新?
HelloService.java
public class HelloService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
new Handler(getMainLooper()).post(new Runnable() {
@Override
public void run() {
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
else {
manager.requestLocationUpdates("gps", 0, 0, new LocationDetector());
Toast.makeText(MainActivity.ctx, "Service Started...", Toast.LENGTH_LONG).show();
}
}
});
}
}).start();
return Service.START_STICKY;
}
}
LocationDetector.java
public class LocationDetector implements LocationListener {
@Override
public void onLocationChanged(Location location) {
/*I have used here Log.e instead of Log.d in order to get the output in clear red message that is easily readable*/
Log.e("GPS: ", location.getLatitude()+ ", " +location.getLongitude(), new Exception());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
}
我尝试了你的整个代码,在我的笔记本电脑上创建了新项目,并在我的 phone 上 运行。
结果:它工作正常,我的 phone 上的 GPS TTF 几乎是 15 秒。
您尝试过其他设备吗?
gps 图标呢?出现了,消失了?
并尝试融合位置提供商,看看会发生什么,link