2016-10-13 8 views
0

私は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 

     } 
    } 

答えて

0

はい、私もこの問題に直面していた次のように

私のコードが設定されています。我々は

build.gradle

ファイルに

targetSdkVersion 23

を使用した場合にはoccure。あなたはその後、同時にユーザーの場所を取得する必要があるときに、以前に許可するために、ユーザーが許可を与える場合

あなたは、あなたが

shouldShowRequestPermissionRationale()

このメソッドのチェックを使用することができます許可ランタイムを取得する必要があり、当社アプリケーションの場合は、再度ユーザーの許可ボックスの前が表示されません。ユーザーが最初に許可を与えるか、以前にdennyを与えたかのいずれかを示します。詳細については、

はそれを確認してください。https://developer.android.com/training/permissions/requesting.html

とちょうど

targetSdkVersion 23

のご

targetSdkVersion 22

instedを設定し、それを解決するもう一つの方法を

+0

私はtargetSdkVersion 22に変更し、Android 6.0.1でテストしました。まだ定期的な場所の報告がありません –

+0

@Raju Gujarati 1つのサービスを作成し、** onStartCommand()**を呼び出すと、現在のlat。、longを得るためのカスタム** GPSTracker **クラスを呼び出します。定期的に –

関連する問題