2017-03-25 16 views
1

私は、サービスにgpsの場所を数秒ごとに更新するためにfusedlocation apiを使用しています。MainActivityでlocationSettings.Openを開くコードを記述しました。onResumeメソッドでサービスを開始します.java)。サービスクラスはブロードキャストを毎回送信します。場所は更新され、onResume()メソッドで受信されます。場所の座標は一度取得してください。once.sendAmblnceGps()メソッドは、場所がサーバーに送信される場所です。Android gpsの場所が定期的に更新されない

GpsService.java:

public class GpsService extends Service implements GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks { 
    com.google.android.gms.location.LocationListener locationListener; 
    LocationRequest mLocationRequest; 
    private static final long INTERVAL = 100* 50; 
    private static final long FASTEST_INTERVAL = 100 * 20; 
    GoogleApiClient googleApiClient; 
    boolean connected; 


    public GpsService() { 

     super(); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     GoogleApiClient.Builder googleApiClientbuilder=new GoogleApiClient.Builder(GpsService.this).addConnectionCallbacks(GpsService.this).addOnConnectionFailedListener(GpsService.this).addApi(LocationServices.API); 
     googleApiClient=googleApiClientbuilder.build(); 
     googleApiClient.connect(); 
     Toast.makeText(getApplicationContext(),"service created",Toast.LENGTH_SHORT).show(); 
    } 

    protected void createLocationRequest() { 
     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(INTERVAL); 
     mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     mLocationRequest.setSmallestDisplacement(100); 
    } 

    protected void startLocationUpdates() { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
       LocationServices.FusedLocationApi.requestLocationUpdates(
       googleApiClient, mLocationRequest, locationListener); 

     Log.d("TAG", "Location update started ..............: "); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e("Service Command", "Started"); 
     locationListener = new com.google.android.gms.location.LocationListener() 
     { 
      @Override 
      public void onLocationChanged(Location location) { 
       Intent intent = new Intent("location_updates"); 
       intent.putExtra("lat", location.getLatitude()); 
       intent.putExtra("longt", location.getLongitude()); 
       Log.e("location", "lat:" + " " + Double.toString(location.getLatitude()) + " " + "Longt:" + " " + Double.toString(location.getLongitude())); 
       sendBroadcast(intent); 
       } }; 
      return START_STICKY; 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient,locationListener); 
     if(googleApiClient.isConnected()){ 
      googleApiClient.disconnect(); 
     } 
     Log.e("Service","Stopped"); 

    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 


    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    Log.e("Connection failed","Service stopped"); 
     LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient,locationListener); 
     if(googleApiClient.isConnected()){ 
      googleApiClient.disconnect(); 
     } 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     createLocationRequest(); 
     startLocationUpdates(); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
    Log.e("Connection","suspended"); 
    } 

} 

MainActivity.java:

@Override 
    protected void onResume() { 
     super.onResume(); 
     if (locationManager == null) { 
      locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
      gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

     } else { 
      gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
      if (isConnected()) { 
       if (gps_enabled) { 
        progressDialog = new ProgressDialog(MainActivity.this); 
        progressDialog.setMessage("Acquiring your current location"); 
        progressDialog.setIndeterminate(true); 
        progressDialog.getWindow().setGravity(Gravity.CENTER); 
        progressDialog.show(); 
        Log.e("starting", "service"); 
        intent = new Intent(MainActivity.this, GpsService.class); 
        startService(intent); 
        broadcastReceiver = new BroadcastReceiver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 
          Log.e("starting", "broadcastservice"); 
          latitude = Double.toString(intent.getDoubleExtra("lat", 0.0)); 
          longitude = Double.toString(intent.getDoubleExtra("longt", 0.0)); 
          if (isConnected()) { 
           sendAmblnceGps(); 
          } else { 
           progressDialog.cancel(); 
           Toast.makeText(getApplicationContext(), "Please enable internet connection", Toast.LENGTH_SHORT).show(); 
          } 

          } 
          }; 
        Log.e("registering", "broadcastservice"); 
        registerReceiver(broadcastReceiver, new IntentFilter("location_updates")); 
          } 
          } 
         else { 
        Toast.makeText(getApplicationContext(),"Enable Internet Connection",Toast.LENGTH_SHORT).show(); 
          } 
          } 
          } 

答えて

0

あなたはmLocationRequest.setSmallestDisplacement(100);を指定しているので、あなたが持っている最初の位置更新の場所から少なくとも100メートルを移動する必要があります新しい場所の更新。

+0

私はgpsの場所を取得しているので、最初のGPS位置が送信されてから5秒後にもう一度サービスを開始してから5秒間遅れます。これは良い方法ですか? – jobin

+0

ほぼ同じ場所の新しい場所の更新を提供するかもしれません。私はそれを試していない。しかし、そのポイントは何でしょうか? 100メートルよりも小さな変位で位置更新をしたい場合は、 'mLocationRequest.setSmallestDisplacement()'で与えられた値を変更してください。また、場所の更新を頻繁に取得する場合は、 'mLocationRequest.setFastestInterval()'で与えられた値を変更してください。 –

関連する問題