2017-05-24 11 views
-1

融合ロケーションプロバイダを使用してアプリで連続的な位置情報を取得しようとしています。何とかLollipopでうまくいきましたが、マシュマロでは位置情報の更新は表示されません。Android APIレベル23で融合ロケーションプロバイダを実装する方法

以下は私のcode.Plzです。私は何が間違っているのか教えてください。

public class Gps extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

TextView lati, longi; 
LocationRequest lr; 
GoogleApiClient mGoogleApiClient; 
double latitude = 0, longitude = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gps); 

    lati = (TextView) findViewById(R.id.lati); 
    longi = (TextView) findViewById(R.id.longi); 

    mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 


} 

@Override 
protected void onStart() { 
    super.onStart(); 

    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    if (mGoogleApiClient.isConnected()) { 

     mGoogleApiClient.disconnect(); 
    } 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 

    lr = LocationRequest.create(); 
    lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    lr.setInterval(1000); 

    if (Build.VERSION.SDK_INT >= 23) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      requestPermissions(new String[]{ 

        Manifest.permission.ACCESS_FINE_LOCATION 
      }, 1); 

      return; 
     } 

    } 
    else{ 

     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, lr,this); 
    } 
} 

@Override 
public void onLocationChanged(Location location) { 

    latitude = location.getLatitude(); 
    longitude = location.getLongitude(); 

    Geocoder gc = new Geocoder(Gps.this, Locale.getDefault()); 

    String locality = null; 
    String sub = null; 

    try { 

     List<Address> addrList; 

     addrList = gc.getFromLocation(latitude, longitude, 2); 

     if (addrList.size() > 0) { 

      Address adr = addrList.get(0); 
      locality = adr.getLocality(); 
      sub = adr.getSubLocality(); 

      lati.setText(locality); 
      longi.setText(sub); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

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

} 

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    switch (requestCode) { 

     case 2: 
      if(){ 
      }     
      else{ 

        } 
    } 

} 

}

答えて

0

あなたのonRequestPermissionsResult機能で位置情報の更新を要求する一切のロジックを持っていません。また、両方をチェックしても、のみであり、ACCESS_COARSE_LOCATIONではありません。

編集:あなたのonConnected機能で

あなたはマシュマロや超えているとき、あなたはLocationServices.FusedLocationApi.requestLocationUpdates()を呼び出すことはありません。それはのようなものであるべきとき

if (Build.VERSION.SDK_INT >= 23) { 
    if (/*No permissions*/) { 
     //Request permissions 
     return; 
    } 
    //Location updates are never requested here!!! 
} 
else { 
    //Request location updates 
} 

:基本的に、あなたはこれをやっている

if (Build.VERSION.SDK_INT >= 23) { 
    if (/*No permissions*/) { 
     //Request permissions 
     return; 
    } 
} 
//Request location updates 
+0

私が粗すぎる場所に対する要求を追加、今言ってくれてありがとうしかし、どのようにonRequestPermissionsResultに位置情報の更新を要求するために、plzは私に知らせて。 – Digvijay

+0

その機能で 'LocationServices.FusedLocationApi.requestLocationUpdates()'を呼び出してください。それ以外の場合は、API 23+では呼び出されません。 –

+0

LocationServices.FusedLocationApi.requestLocationUpdates(mGo ogleApiClient、lr、this)を追加しようとしています。 OnRequestPermissionResultでは、しかし、add permission checkというエラーを表示していますが、私はすでにパーミッションをチェックしています。 – Digvijay

関連する問題