2016-10-13 4 views
0

Ich möchte yo erstellen den Hintergrund-Service für die Protokollierung GPS-Standort. Wenn es zur Ausführung kommt, gibt es mir keine periodischen Daten, egal ob im Büro oder auf der Straße oder auf dem Land. Würden Sie mir bitte sagen, wie Sie den GPS-Standort für alle n Sekunden abrufen können? Ich habe manchmal die Ausnahme Suppressed StrictMode Richtlinienverletzung erworben: StrictModeDiskReadViolation bekam.Android 6.0.1 periodische erhalten GPS-Standort fehlgeschlagen

ist mein Code wie folgt festgelegt:

public class TaskpointActivity extends FragmentActivity implements LocationListener, 
     GoogleMap.InfoWindowAdapter { 

     private static final long POLLING_FREQ = 1000 * 2; 


    private LocationManager mLocationManager ; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     try { 

... 


    mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);   

       mLocationManager.requestLocationUpdates(
         LocationManager.GPS_PROVIDER, POLLING_FREQ, 1, this); 

       mLocationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, POLLING_FREQ, 1, this); 

     } catch (Exception ex) { 
      SystemUtils.takeLog(this, ex.getMessage()); 
      ex.printStackTrace(); 
     }  
} 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 
     Log.i(TAG, "onStatusChanged PROVIDER:" + provider + " STATUS:" + String.valueOf(status)); 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Log.i(TAG, "onProviderEnabled PROVIDER:" + provider); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     Log.i(TAG, "onProviderDisabled PROVIDER:" + provider); 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 

     if(mLastLocation !=null) { 
       deviceSpeed = Math.sqrt( Math.pow(location.getLongitude() - mLastLocation.getLongitude(), 2) 
           + Math.pow(location.getLatitude() - mLastLocation.getLatitude(), 2) 
       )/(location.getTime() - this.mLastLocation.getTime()); 
     }else{ 
       mLastLocation = location; 
     } 

      if (location.hasSpeed()) 
       deviceSpeed = location.getSpeed(); 

     SystemUtils.takeLog(this , "location latitude : " + location.getLatitude()); 
     SystemUtils.takeLog(this , "location longitude : " + location.getLongitude() ); 
     SystemUtils.takeLog(this , "location speed device : " + location.getSpeed()); 
     SystemUtils.takeLog(this , "location speed calculated : " + deviceSpeed ); 

     LatLng startPosition = markerSingle!=null ? markerSingle.getPosition() : 
       new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()); 

     if(executeFollowMe) { 


      double latitu = startPosition.latitude; 
      double longitu = startPosition.longitude ; 

      int fixed = 30; 
      for(int i = 0 ; i < 30 ; i ++) { 

       if(i < 10) { // east 
        longitu = longitu + (i+1) * 0.000003; 
       }else if(i >=10 && i < 20) { // curve 
        int incre = i+1 ; 
        longitu = longitu + incre * 0.000003; 
        latitu = latitu + (fixed- incre) * 0.000003; 
       }else if(i >=20 && i < 30) { // north 
        latitu = latitu + (i+1) * 0.000003; 
       } 
       LatLng currentPostion = new LatLng (latitu , longitu) ; 
       prepareFollowMe(currentPostion);  
       //startPosition 
      } 

      SystemUtils.takeLog(TaskpointActivity.this, markerSingle!=null ? "prepare Follow me mock" : "prepare Follow me real device"); 
      //LatLng positionX 

     } 
    } 

Antwort

0

Ja, ich auch dieses Problem konfrontiert wurde. Es occure wenn wir

targetSdkVersion 23

in unserem

build.gradle

Datei.

Wenn Sie Benutzer Ort müssen gleichzeitig erhalten, dann müssen Sie die Erlaubnis der Laufzeit bekommen, dann können Sie

shouldShowRequestPermissionRationale()

diese Methode Prüfung verwenden, wenn der Benutzer die Erlaubnis, für die zuvor erlauben, in unseren App dann wird es nicht wieder Berechtigungsbox vor dem Benutzer angezeigt. Es zeigt entweder Benutzer geben Erlaubnis erstmals oder wenn sie Denny vorher geben.

für weitere Informationen, die sie überprüfen: https://developer.android.com/training/permissions/requesting.html

und eine weitere Möglichkeit, es einfach zu lösen, geben Sie Ihre

targetSdkVersion 22

insted

targetSdkVersion 23

.

+0

Ich habe in targetSdkVersion 22 geändert und mit Android 6.0.1 testen. noch kein periodischer Standortbericht –

+0

@Raju Gujarati Erstellen Sie einen Dienst und in ** onStartCommand() ** rufen Sie eine benutzerdefinierte ** GPSTracker ** -Klasse auf, um den aktuellen Lat., long. regelmäßig –

Verwandte Themen