2016-08-03 62 views
0

ich nicht bekommen es in OnLocationChanged, OnStatusChanged, onProviderEnabled, geben Sie onProviderDisabled I checked auszuschalten und auf dem GPS ich draußen versucht Büro (für, dass der Zähler genannt contador Sie in diesem Beispiel sehen)Location nicht (innen intentService) arbeiten, aber getLastKnownLocation ist (Rückkehr verschiedene GPS-Koordinaten)

Dies ist mein Code

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; 
       } 
      } 


     } 
    } 

} 

Antwort

1

Ihr Intent-Dienst aus dem Speicher entfernt zu werden, bevor es eine richtige Lese bekommen kann von seiner Lage Hörer ist. Dies liegt daran, dass ein Intent-Dienst zerstört wird, nachdem die Methode onHandleIntent (Intent Intent) aufgerufen wurde. Versuchen Sie, die Standortaktualisierungen ständig mit einem Dienst abzurufen, und rufen Sie diese Aktualisierungen bei Bedarf mit einem separaten Intent-Dienst ab.

Hier ist ein Link, der untersucht, wie ein anderer Benutzer dies getan hat. Location listener works from a Service but not an IntentService

Siehe "Edit3" für diese Benutzerlösung nach Tipps und Feedback von anderen Benutzern. Hoffe das hilft.