web-dev-qa-db-ja.com

マニフェストからの許可がAndroid 6で機能しません

以下を完全に無視します。

<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW"/>

だから私は例外を得た:

原因:Android.view.WindowManager $ BadTokenException:ウィンドウAndroid.view.ViewRootImpl$W@86fb55bを追加できません-このウィンドウタイプの許可は拒否されました

リストされていません:

enter image description here

どうすれば修正できますか?ありがとう。

編集:

アプリの設定/詳細/他のアプリの上に描画にリストされています。だから私はそれをオンにして今はうまく動作しますが、なぜ私のアプリを実行するときに許可について尋ねるダイアログがないのですか?すべての許可はデフォルトでオフにされ、設定に移動して手動でオンにする必要がありますか?

67

CommonsWareのブログ投稿 のおかげで、手がかりが得られました。

コードがActivityまたはFragmentにあると仮定して、オーバーレイの許可を確認し、必要に応じて要求を行います。

public static int OVERLAY_PERMISSION_REQ_CODE = 1234;

public void someMethod() {
    if (!Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
    }
}

次に、より良いUXの許可を再確認します。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
        if (!Settings.canDrawOverlays(this)) {
            // SYSTEM_ALERT_WINDOW permission not granted...
        }
    }
}
127
Shigerello