我试图在我的服务中两次致电位置经理。
首先它将调用 Manager onStart,然后我将计时器设置为 20 秒,然后我再次调用它。
第一次工作,但第二次在 20 秒后根本没有调用位置管理器。
以下是我尝试过的代码:
public void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
Log.e("Location1", "Inside onStart");
t = new Timer();
locationFirst = "First";
talker = new TextToSpeech(this, this);
location = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new MyLocationListener();
location.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 10,locationListener);
}
public void testMethod()
{
//Declare the timer
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.e("Time",""+time);
time += 1;
String todis = String.valueOf(time);
if(todis.contains("20"))
{
Looper.myLooper();
Looper.prepare();
talker.speak("Testing Service inside 20 in a App",TextToSpeech.QUEUE_ADD,null);
locationFirst = "Second";
locationTocall();
time = 0;
t.cancel();
}
}
}, 0, 1000);
}
public void locationTocall()
{
locationListener = new MyLocationListener();
location.requestLocationUpdates(location.NETWORK_PROVIDER, 5000, 10,locationListener);
}
private class MyLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location loc)
{
Log.e("Location1", "Inside MyLocation");
String longitude = String.valueOf(loc.getLongitude());
String latitude = String.valueOf(loc.getLatitude());
String s = latitude+"\n"+longitude;
Log.e ("Location1", " "+s);
location.removeUpdates(locationListener);
if(locationFirst.equalsIgnoreCase("FIRST"))
{
testMethod();
}
else
{
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}