2016-10-14 6 views
0

こんにちは私はアンドロイド開発のための新しい私はそれのためのバックグラウンドタスクで15分ごとにユーザーの場所を取得する必要があります私はgpsがオフになったときに場所の更新を取得するために使用googleapiclientどのように融合APIクライアントを使用して場所の更新を得る方法OLAタクシー利用などのアプリは誰も私は私がこれまで試したどのような私のコードを投稿してみましょうアウトhelpmeことができます。ユーザーがgpsを強制的にオフにしても、fusedloaction APIを使用してバックグラウンドで位置情報を取得する方法はありますか?

public class Locationlistener implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,LocationListener { 


    private Location mlocation; // location 
    private double latitude; // latitude 
    private double longitude; // longitude 
    private GoogleApiClient mGAC; 
    private Context mContext; 
    public static final String TAG = "GPSresource"; 
    private FusedLocationProviderApi fusedLocationProviderApi; 
    private LocationRequest locationRequest; 

    public Locationlistener(Context c) 
    { 
     mContext = c; 
     try { 
      buildGoogleApiClient(); 
      mGAC.connect(); 
     } 
     catch(Exception e) 
     { 
      Log.d(TAG,e.toString()); 
     } 
    } 

    protected synchronized void buildGoogleApiClient() { 
     locationRequest = LocationRequest.create(); 
     locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     locationRequest.setInterval(1); 
     locationRequest.setFastestInterval(1); 
     fusedLocationProviderApi = LocationServices.FusedLocationApi; 
     mGAC = new GoogleApiClient.Builder(mContext) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
     } 


    public double getLatitude(){ 
     if(mlocation != null){ 
      latitude = mlocation.getLatitude(); 
     } 

     // return latitude 
     return latitude; 
    } 

    /** 
    * Function to get longitude 
    * */ 
    public double getLongitude() { 
     if (mlocation != null) { 
      longitude = mlocation.getLongitude(); 
     } 

     // return longitude 
     return longitude; 
    } 

    public Location GetLocationBlocking() throws InterruptedException { 



     //  String lat=String.valueOf(moCurrentLocation.getLatitude()); 
     // String longt=String.valueOf(moCurrentLocation.getLongitude()); 
//  Toast.makeText(oContext,"Lat"+lat+"long"+longt,Toast.LENGTH_SHORT).show(); 
     return mlocation; 

    } 


    @Override 
    public void onConnected(Bundle bundle) { 
     if (mGAC != null) { 

      Location oLocation = LocationServices.FusedLocationApi.getLastLocation(mGAC); 
      mlocation = oLocation; 
      getLatitude(); 
      getLongitude(); 
      if (oLocation != null){ 
       Log.d("lat",String.valueOf(mlocation.getLatitude())); 
      Log.d("long",String.valueOf(mlocation.getLongitude())); 
      } 
      else{ 
       LocationServices.FusedLocationApi.requestLocationUpdates(mGAC, locationRequest, this); 
     } }} 


    @Override 
    public void onConnectionSuspended(int i) { 

    } 




    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mlocation=location; 
    } 
} 

は、GPSは、事前に感謝をオフにするとそれも働くようにする方法!

答えて

0

ではなく

PRIORITY_HIGH_ACCURACY

PRIORITY_LOW_POWER

で試してみてください最後の一つはGPSを介してネットワークの場所を使用しようとします。私はあなたがたManifest.xmlで定義したものを知っていますが、

ACCESS_FINE_LOCATION

を定義した場合、私は私が定義されている

ACCESS_COARSE_LOCATION

+0

のためにそれを変更しますいけませんどちらも私はgpsが利用可能な場合、GPSの場所またはネットワークベースの場所を取得する方法が必要 –