2017-06-17 73 views
-4

我正在创建一个应用程序,在该应用程序中提取用户的当前位置。一种方法是开始获取当前位置。这种方法不断在后台运行,但我无法停止这种方法。所以,请告诉如何制止这种使用下面的代码....如何停止位置提取方法当我想要停止

public class Location extends Fragment{ 

String latitude, longitude; 

double lt, lg; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 


    View v; 
    v = inflater.inflate(R.layout.fragment_attendance, container, false); 



} 


public boolean startService() { 


    try { 

     FetchCordinates fetchCordinates = new FetchCordinates(); 
     fetchCordinates.execute(); 
     return true; 

    } catch (Exception error) { 
     return false; 
    } 

} 


public class FetchCordinates extends AsyncTask<String, Integer, String> { 

    public double lati = 0.0; 
    public double longi = 0.0; 

    public LocationManager mLocationManager; 
    public VeggsterLocationListener mVeggsterLocationListener; 

    @Override 
    protected void onPreExecute() { 

     mVeggsterLocationListener = new VeggsterLocationListener(); 
     mLocationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 

     if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      return; 
     } 


     mLocationManager.requestLocationUpdates(
       LocationManager.NETWORK_PROVIDER, 0, 0, 
       mVeggsterLocationListener); 



    } 

    @Override 
    protected void onCancelled() { 
     System.out.println("Cancelled by user!"); 

     if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      return; 
     } 
     mLocationManager.removeUpdates(mVeggsterLocationListener); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     pDialog.dismiss(); 
     /*Toast.makeText(getActivity(), 
       "LATITUDE :" + lati + " LONGITUDE :" + longi, 
       Toast.LENGTH_LONG).show();*/ 

     lt=lati; 
     lg=longi; 

     latitude= String.valueOf(lati); 
     longitude= String.valueOf(longi); 

     getAddress(); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 

     while (this.lati == 0.0) { 

     } 
     return null; 
    } 

    public class VeggsterLocationListener implements LocationListener { 

     @Override 
     public void onLocationChanged(Location location) { 

      /*int lat = (int) location.getLatitude(); // * 1E6); 
      int log = (int) location.getLongitude(); // * 1E6); 
      int acc = (int) (location.getAccuracy());*/ 

      //String info = location.getProvider(); 
      try { 

       // LocatorService.myLatitude=location.getLatitude(); 

       // LocatorService.myLongitude=location.getLongitude(); 

       lati = location.getLatitude(); 
       longi = location.getLongitude(); 


       lt=lati; 
       lg=longi; 

       latitude= String.valueOf(lati); 
       longitude= String.valueOf(longi); 
       //Toast.makeText(getActivity(), "data is.." + lati + "," + longi, Toast.LENGTH_LONG).show(); 

       getAddress(); 

      } catch (Exception e) { 
       // progDailog.dismiss(); 
       // Toast.makeText(getApplicationContext(),"Unable to get Location" 
       // , Toast.LENGTH_LONG).show(); 
      } 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.i("OnProviderDisabled", "OnProviderDisabled"); 



     } 

     @Override 
     public void onProviderEnabled(String provider) { 


     } 

     @Override 
     public void onStatusChanged(String provider, int status, 
            Bundle extras) { 
      Log.i("onStatusChanged", "onStatusChanged"); 


     } 

    } 

} 


} 

请告诉我,浩当我要停下来制止这种方法..

谢谢..

+2

可能的重复[理想的方式来取消正在执行的AsyncTask](https://stackoverflow.com/questions/2735102/ideal-way-to-cancel-an-executing-asynctask) – Tigger

+0

如何取消asyncTask请告诉我 –

回答

0
fetchCordinates.cancel(); 

使用此method.It将停止你的非同步任务

0

只需拨打

fetchCordinates.cancel(true); 

该参数被称为mayInterruptIfRunning。顾名思义,如果您通过了错误,则可以完成正在进行的任务。

+0

异步TASK不停止使用此方法 –