2011-05-12 67 views
0

在这里的朋友创建。在我销毁服务在android仍然方法调用之后,我在服务中创建方法。我想知道如何停止呼叫方法,我把服务

这里是我的代码

package com.servicelistener; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 
import java.util.Timer; 

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.location.Address; 
import android.location.Criteria; 
import android.location.Geocoder; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.widget.Toast; 

import com.google.android.maps.GeoPoint; 

public class SimpleService extends Service { 
    Timer mytimer; 
    private String provider; 
    private LocationManager locationManager; 
    private LocationListener locationListener; 

//LocationManager locationManager; 
//LocationListener mlocListener; 
//private Handler toasthandler = new Handler(); 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
      super.onCreate(); 
      Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show(); 
      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  

      locationListener = new GPSLocationListener(); 
      Criteria criteria = new Criteria(); 
      //criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
      //criteria.setAccuracy(Criteria.ACCURACY_FINE); 
      provider = locationManager.getBestProvider(criteria, true); 

      locationManager.requestLocationUpdates(provider, 60000, 0, locationListener); 


    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this, "Service destroy", Toast.LENGTH_LONG).show(); 
     //mytimer.cancel(); 
    } 
    private class GPSLocationListener implements LocationListener 
    { 
     @Override 
     public void onLocationChanged(Location location) { 
      if (location != null) { 
       GeoPoint point = new GeoPoint(
         (int) (location.getLatitude() * 1E6), 
         (int) (location.getLongitude() * 1E6)); 

       Toast.makeText(getBaseContext(), 
         "Latitude: " + location.getLatitude() + 
         " Longitude: " + location.getLongitude(), 
         Toast.LENGTH_SHORT).show(); 

       //Toast.makeText(getBaseContext(),"hi", 8000).show(); 

       String address = ConvertPointToLocation(point); 
       Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show(); 


      } 
     } 

     public String ConvertPointToLocation(GeoPoint point) { 
      String address = ""; 
      Geocoder geoCoder = new Geocoder(
        getBaseContext(), Locale.getDefault()); 
      try { 
       List<Address> addresses = geoCoder.getFromLocation(
        point.getLatitudeE6()/1E6, 
        point.getLongitudeE6()/1E6, 1); 

       if (addresses.size() > 0) { 
        for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++) 
         address += addresses.get(0).getAddressLine(index) + " "; 
       } 
      } 
      catch (IOException e) {     
       e.printStackTrace(); 
      } 

      return address; 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
    } 
} 

销毁服务还是从应用程序获得位置之后。并提出了创建服务方法的应用方法。我想停止调用这个

回答

0

看来你需要注销你的位置更新侦听器。

考虑以下

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    locationManager.removeUpdates(locationListener); 
    Toast.makeText(this, "Service destroy", Toast.LENGTH_LONG).show(); 
    //mytimer.cancel(); 
} 
+0

感谢名单了很多.... – 2011-05-12 11:00:15

+0

是它按预期工作?它解决了你的问题? – Olegas 2011-05-12 11:25:12

+0

亚..但现在我有另一个问题,在这...你可以帮助我..问题就像我想使用requestlocationupdates方法loction。现在我只想在一些特定的间隔之后才想要涂抹。当我从一个地方移动到另一个地方时,我也会获得地点。我经过一段定义的时间间隔后, – 2011-05-12 11:32:07