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
}
}
Ich habe in targetSdkVersion 22 geändert und mit Android 6.0.1 testen. noch kein periodischer Standortbericht –
@Raju Gujarati Erstellen Sie einen Dienst und in ** onStartCommand() ** rufen Sie eine benutzerdefinierte ** GPSTracker ** -Klasse auf, um den aktuellen Lat., long. regelmäßig –