1

新しい からのアクセス許可でコードを更新していますAndroid API 23。ユーザーの場所を表示したい場合は、map.setMyLocationEnabled(true). 権限がある場合はユーザーの場所を表示できます。権限がない場合は、この API 呼び出しを行いませんが、権限を要求し、ユーザーが場所権限の付与を受け入れた後、ユーザーの場所でマップを更新できません。私は2つのアプローチを試しました:

アプローチ 1 (マップの再構築):

 private void populateMap() {
        mapFragment.getMapAsync(new OnMapReadyCallback() {
                @Override
                public void onMapReady(GoogleMap map) {
                    ...
                    if (PermissionsManager.getInstance().hasLocationPermissions(getActivity())) {
                        map.setMyLocationEnabled(true);
                    } else {
                        request permissions...
                    }
                    ...
                }
        }
 }

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PermissionsManager.LOCATION_PERMISSION_REQUEST: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    populateMap();
                }
                return;
            }
        }
    }

アプローチ 2 (マップ インスタンスを使用して更新する):

private void populateMap() {
        mapFragment.getMapAsync(new OnMapReadyCallback() {
                @Override
                public void onMapReady(GoogleMap map) {
                    mMap = map;
                    ...
                    if (PermissionsManager.getInstance().hasLocationPermissions(getActivity())) {
                        map.setMyLocationEnabled(true);
                    } else {
                        request permissions...
                    }
                    ...
               }
        }
}

@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PermissionsManager.LOCATION_PERMISSION_REQUEST: {
                if (mMap!= null && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    mMap.setMyLocationEnabled(true);
                }
                return;
            }
        }
    }

どちらのアプローチでも、場所ボタンは表示されますが、ユーザーの場所を示す青い点は表示されません。ここで何が欠けていますか?ありがとう。

ps: もちろん、フラグメントを強制終了して再度起動すると、すべて正常に動作します。この問題は、ユーザーに許可を求めるプロンプトを表示し、ユーザーの承認後に自分の場所でマップを更新する必要がある場合に発生します。

4

2 に答える 2