チャオ!私は現在の場所が必要なアクティビティを持っているので、ユーザーはどのオブジェクトが近くにいるのかを見ることができます。Android - 場所を取得する最も簡単な方法
GoogleApiClient、FusedLocation、コールバックなどに夢中になります。唯一の結果は、getLastLocation
はnull
です。
マイアクティビティGoogleApiClient.ConnectionCallbacks
とGoogleApiClient.OnConnectionFailedListener
を実装しています。私もこれ持って
private void getLocation(){
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(60*1000);
locationRequest.setFastestInterval(10*1000);
mFusedLocationApi = LocationServices.FusedLocationApi;
gApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
if (gApiClient != null) {
gApiClient.connect();
}
}
:
@Override
protected void onStart() {
super.onStart();
if (gApiClient != null) {
gApiClient.connect();
}
}
@Override
protected void onStop() {
gApiClient.disconnect();
super.onStop();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.w("ADVSEARCH","Error on connection failed");
}
@Override
public void onConnectionSuspended(int i) {
Log.w("ADVSEARCH","Error on connection suspended");
}
@Override
public void onConnected(Bundle bundle) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//lastlocation = LocationServices.FusedLocationApi.getLastLocation(gApiClient);
mFusedLocationApi.requestLocationUpdates(gApiClient, locationRequest, new com.google.android.gms.location.LocationListener() {
@Override
public void onLocationChanged(Location location) {
lastlocation = location;
}
});
}
lastlocation = LocationServices.FusedLocationApi.getLastLocation(gApiClient);
}
をとはい、OnCreate
に私はアクセス権のチェック、このようなものです私はgetLocation()
呼び出すOnCreate
で
。最小API 16、ターゲットAPI 25. ヌルオブジェクトでdistanceTo
を使用しているため、初めてクラッシュするときにアプリケーションを開く。私は何が欠けていますか?私が検索するほど、私はもっと混乱します。
「私はアプリを開くたびに、私はnullオブジェクトに 'distanceTo'を使用しているため、それがクラッシュした最初の時間を」 - あなたは'で) 'distanceToを(使用していません質問のあなたのコードリスト。 – CommonsWare
@CommonsWareそれは単に 'clickListener'の' distanceTo() 'ですが、他の関連する行はありません。私は場所に関するコードしか書いていません。私は 'distanceTo()'の前にロギングするので、 'lastLocation'がnullであることを知っています。 – tuzzo
まあ、 'getLastLocation()'は 'null'を返すことができます。 'lastLocation'は、' getLastLocation() 'または' onLocationChanged() 'によって設定されるまで使用しないでください。たとえば、非ヌル位置になるまでそのボタンを無効にすることができます。 – CommonsWare