Java 在不锁定屏幕的情况下延迟环路
我一直在开发一个应用程序,需要在其中获取设备的位置。问题是,我想尝试至少5或10次,每次尝试之间需要一个延迟,以便在每次尝试失败后在屏幕上显示错误消息LocationMsg。我之所以希望延迟,是因为有时gps开始工作并获得实际位置需要一些时间。我尝试了很多东西,但都没能成功。这个想法是要有一个类似于“终端”的界面,在这里我将显示一条消息错误,然后重试1/5。。错误2/5。。。。每次尝试之后。问题是,我尝试过使用Handler和Thread.sleep,但我总是锁定屏幕,每次尝试后都看不到屏幕上显示的错误消息 这是我获取位置的方法:Java 在不锁定屏幕的情况下延迟环路,java,android,loops,delay,Java,Android,Loops,Delay,我一直在开发一个应用程序,需要在其中获取设备的位置。问题是,我想尝试至少5或10次,每次尝试之间需要一个延迟,以便在每次尝试失败后在屏幕上显示错误消息LocationMsg。我之所以希望延迟,是因为有时gps开始工作并获得实际位置需要一些时间。我尝试了很多东西,但都没能成功。这个想法是要有一个类似于“终端”的界面,在这里我将显示一条消息错误,然后重试1/5。。错误2/5。。。。每次尝试之后。问题是,我尝试过使用Handler和Thread.sleep,但我总是锁定屏幕,每次尝试后都看不到屏幕上显
int breakloop=0;
private void GetLocation(){
locationmanager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria cri=new Criteria();
String provider=locationmanager.getBestProvider(cri,false);
if(provider!=null & !provider.equals("")){
//Get location
final Location location=locationmanager.getLastKnownLocation(provider);
locationmanager.requestLocationUpdates(provider,2000,10,this);
while(breakloop<10){
breakloop++;
if(location!=null)
onLocationChanged(location);
else
FailedLocationMSG(breakloop);
}
}else
Toast.makeText(getApplicationContext(),"Provider is null",Toast.LENGTH_LONG).show();
}
您可以使用FutureTask和Callable进行位置检查,并等待其返回值
public class LocationChecker implements Callable<Location> {
@Override
public Location call() throws Exception {
//do your stuff for location check
return location;
}
}
在你的方法中,你做了如下事情
LocationChecker lc = new LocationChecker();
FutureTask<Location> ft = new FutureTask<Location>(lc);
ExecutorService es = Executors.newCachedThreadPool();
es.execute(ft);
Location loc;
int attempts = 0;
while(attempts < 10) {
if(ft.isDone() && loc != null) {
es.shutdown();
break;
}
else if(ft.isDone() && loc == null) {
ft = new FutureTask<Location>(lc);
es.execute(ft);
attempts++;
}
loc = ft.get();
}
这将检查您的位置并等待十次结果。您面临的问题是什么?您只指定了要执行的操作,请添加有关确切问题的详细信息。我已尝试使用Handler和Thread.sleep,但我始终锁定屏幕,每次尝试后都看不到屏幕上显示的错误消息。