サービスでロケーション マネージャーを 2 回呼び出そうとしています。
まず Manager onStart を呼び出し、次に 20 秒間タイマーを設定して、もう一度呼び出します。
最初は機能していますが、20 秒後に 2 回目はロケーション マネージャーがまったく呼び出されません。
以下は私が試したコードです:
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) {
}
}