私はGPSの場所を記録するバックグラウンドサービスを作成したいと思います。それが実行になると、それは私にオフィスやストリートや国の側に関係なく、定期的なデータを与えません。 GPSの位置をn秒ごとに取得する方法を教えてください。 StrictModeポリシー違反が発生しました:StrictModeDiskReadViolationが取得されました。Android 6.0.1定期的にGPSの位置を取得できませんでした
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
}
}
私はtargetSdkVersion 22に変更し、Android 6.0.1でテストしました。まだ定期的な場所の報告がありません –
@Raju Gujarati 1つのサービスを作成し、** onStartCommand()**を呼び出すと、現在のlat。、longを得るためのカスタム** GPSTracker **クラスを呼び出します。定期的に –