2016-08-03 17 views
0

我不明白這一點在 onLocationChanged,onStatusChanged,onProviderEnabled進入,onProviderDisabled 我檢查關閉和打開GPS 我試過外辦事處(你在這個例子中看到櫃檯叫康塔多)LocationListener的不工作(內部intentService),但getLastKnownLocation不(返回不同的GPS座標)

這是我的代碼

import android.Manifest; 
import android.app.IntentService; 
import android.app.Notification; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.content.Context; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 


/** 
* An {@link IntentService} subclass for handling asynchronous task requests in 
* a service on a separate handler thread. 
* <p> 
* TODO: Customize class - update intent actions, extra parameters and static 
* helper methods. 
*/ 
public class ISSubProcesoGps extends IntentService { 
    // TODO: Rename actions, choose action names that describe tasks that this 
    // IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS 

    public static int hacambiado=0; 

    LocationManager lm; 

    double longitude; 
    double latitude; 

    Location location=null; 

    public static volatile boolean shouldContinue = true; 
    int contador = 0; 


    LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      longitude = location.getLongitude(); 
      latitude = location.getLatitude(); 
      //mLocation = location; 
      //altitude = location.getAltitude(); 
      hacambiado++; 
     } 

     @Override 
     public void onStatusChanged(String s, int i, Bundle bundle) { 
String x=s; 
     } 

     @Override 
     public void onProviderEnabled(String s) { 
      String x=s; 
     } 

     @Override 
     public void onProviderDisabled(String s) { 
      String x=s; 
     } 
    }; 


    // TODO: Rename parameters 


    public ISSubProcesoGps() { 

     super("ISSubProcesoGps"); 


    } 

    /** 
    * Starts this service to perform action Foo with the given parameters. If 
    * the service is already performing a task this action will be queued. 
    * 
    * @see IntentService 
    */ 


    @Override 
    protected void onHandleIntent(Intent mIntent) { 

     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 



     latitude = 0; 
     longitude = 0; 



     if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 


      Intent intent = new Intent(getBaseContext(), MainActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0); 

      Notification notification = new Notification.Builder(this) 
        .setSmallIcon(R.drawable.ic_menu_gallery) // the status icon 
        .setTicker("hola muy myintentservice") // the status text 
        .setWhen(System.currentTimeMillis()) // the time stamp 
        .setContentTitle("content title") // the label of the entry 
        .setContentText("content teext") // the contents of the entry 
        .setContentIntent(pendIntent) // The intent to send when the entry is clicked 
        .build(); 

      startForeground(1, notification); 

      while(true) 
      { 
       try { 
        location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
        Thread.sleep(1000); 

       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       if(!shouldContinue) 
       { 
        if(lm!=null) 
         lm.removeUpdates(locationListener); 
        lm=null; 
        break; 
       } 
      } 


     } 
    } 

} 

回答

1

你的意圖服務是獲取從內存中刪除,然後才能得到正確的閱讀,從它的位置的聽衆。這是由於Intent Service在方法onHandleIntent(Intent intent)被調用後被銷燬。嘗試使用服務不斷監聽位置更新,並根據需要通過單獨的意向服務檢索這些更新。

這裏是一個鏈接,探討另一個用戶如何做到這一點。 Location listener works from a Service but not an IntentService

從其他用戶的提示和反饋後,查看該用戶解決方案的「編輯3」。希望這可以幫助。