12

ユーザーが以前に [なし] オプションを選択した場合、アプリの位置情報サービスを再度許可する (または少なくともダイアログを表示する) 方法はありますか?

ここに画像の説明を入力

onResult(..) コールバックで常に LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE を取得するため、コードで再度表示する方法が見つかりません。

    @Override
    public void onResult(LocationSettingsResult locationSettingsResult) {
        final Status status = locationSettingsResult.getStatus();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                Log.i(TAG, "All location settings are satisfied.");
//                        startLocationUpdates();
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" +
                        "upgrade location settings ");

                try {
                    // Show the dialog by calling startResolutionForResult(), and check the result
                    // in onActivityResult().
                    status.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS);

                } catch (IntentSender.SendIntentException e) {
                    Log.i(TAG, "PendingIntent unable to execute request.");
                }
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " +
                        "not created.");
                break;
        }
    }

私が見つけた唯一の解決策は、アプリを再インストールするか、データを消去することです。

4

4 に答える 4

27

以前にユーザーが「しない」オプションを選択した場合、位置情報サービスを有効にする回避策が見つからなかったため、上記の @Lesvmac の回答に従って、アプリを削除して再インストールするようユーザーに再度依頼しましたが、これは正しい解決方法ではないと思いますこのあたりの問題。

したがって、現時点で最善の方法は、リクエスト ダイアログに「Never」オプションを表示させないことです。追加してみる

builder.setAlwaysShow(true);

LocationSettingsRequest.Builderに追加すると、デフォルトの「なし」、「はい」、および「今ではありません」ではなく、「はい」および「いいえ」オプションのみ生成 SETTINGS_CHANGE_UNAVAILABLE 受信することはありません

完全な方法は次のとおりです。

 private void requestSettings() {
    LocationSettingsRequest.Builder builder =
            new LocationSettingsRequest.Builder()
                    .setAlwaysShow(true)
                    .addLocationRequest(request);
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,
                    builder.build());

    result.setResultCallback(this);
}


image_before_set_always_show

image_after_set_always_show

于 2015-09-08T12:59:00.120 に答える
1

そうです、決して決してという意味ではありません!ユーザーが以前にアプリの位置情報の許可要求に対して「今は」と答えていない場合は、許可を求めるダイアログを生成できます。しかし、彼らがあなたに二度と尋ねさせないことを選択した場合、それは永久に設定され、削除して再インストールするように彼らに伝える必要があります. (位置情報が一時的にオフになっているが、アプリが位置情報へのアクセス許可を持っている場合、デバイスの位置情報サービスのステータスを変更するよう求めるダイアログが表示されます。) 位置情報がアプリの必要なコンポーネントである場合、インストール時にアクセスを要求することを検討してください。今後の Android M では、アプリごとに個別の権限を設定およびリセットできるようになり、この種の問題を回避するのに役立ちます。

于 2015-07-20T19:47:13.253 に答える
0

その特定のアプリのアクセス許可を手動で許可して、アクセス許可の要求ダイアログをリセットする必要があります。

アプリ情報を開きます (アプリ ランチャーからドラッグするか、[設定] - [アプリ] - [アプリ名])

権限を選択

「二度と確認しない」で拒否した許可を有効にします

(オプション) ここから再度無効にします。この時点までに、アプリは必要に応じて再度アクセス許可を要求することに注意してください。

リンク: https://android.stackexchange.com/questions/125939/reset-the-request-permission-dialog-on-marshmallow

于 2016-08-23T00:32:10.087 に答える
0

解決策は非常に簡単で、見逃しがちです(少なくともAndroid 5.1では)...

画面の上端から下にスワイプすると、プルダウン メニューが表示されます。「アプリの権限管理」を押します。アプリと権限を変更したいアプリを押します。出来上がり!

于 2016-12-27T07:58:29.093 に答える