私はNexus 6でAndroid Marshmallowを使用しています。次の問題を解決しようとしています。
通知が表示されている間にユーザーが許可を与えようとすると、 "Screen overlay detected"というメッセージが表示され、[Request Permission]ダイアログが消えます - もちろん、アプリは要求された許可を得ません。 (スクリーンショットを確認)
マニフェストに "DRAW OVER OTHER APPS"アクセス許可 - Android.permission.SYSTEM_ALERT_WINDOWを追加して問題を解決しようとしましたが、運が悪いです。
シモンズ:私は問題が通知によって引き起こされると確信しています。他のアプリの上にオーバーレイするアプリはインストールされていません。設定で[他のアプリの上に描画]権限を持つすべてのアプリをオフにすることもできました。助けにはならなかった..
誰もがその問題の解決策を知っていますか?
私が遭遇した状況では、私は自分で問題を引き起こしていました。私が許可を求めていたのと同時にToast
を使用してユーザーに情報を表示した結果です。これらの両方のアクションが一緒になってこのタイプのエラーを引き起こします。
他の答えは他の誰かの問題を解決するかもしれません。しかし、私はあなたがあなた自身のオーバーレイエラーを引き起こすことに慎重になるべきであることに注意したかったです。同時に許可を要求しながら、ビューに何かを重ねるように注意してください。
Clean Masterアプリをアンインストールします。アンインストールして問題を解決しました
この問題は、Twilight、cleaner-master、drupeなどの原因となるアプリケーションが原因で発生します。
この問題を解決するには、これらの原因となるアプリのスクリーンオーバーレイを無効にする必要があります。
私はモトG4プラスを持っている、そしてこれは私がこの問題を解決する方法です
設定 - >アプリの選択--->もう一度アプリの設定アイコンを選択してください--->他のアプリの上に描画を選択してください--->他のアプリに迷惑をかけている犯人アプリを無効にしてください。
私がしたのは、この権限を無効にして自分のアプリを実行しようとすることによって各アプリをチェックすることです。
スクリーンショット:
ここや他のフォーラムで複数の回答から洞察を得ました。
私がこの問題をどのように解決したかを整理すること
何か問題があれば教えてください。
注:私はOne plus Oneモバイルを使用しています。
アプリを削除し、Nexus 6Pをオフにしました。電源を入れ直した後、アプリを再インストールしたところ、アプリにアクセス許可を与えたときに「スクリーンオーバーレイ」ダイアログが表示されなくなりました。
この「オーバーレイアラート」が理由なく表示される一部のデバイス(私の分析データによるとデバイスの2〜5%)でAndroid 6.xがバグがある限り、最善の解決策は以下の方法で許可プロセス全体を回避することです。 targetSdkを22に定義します。
ターゲットSDKを新しいバージョンにダウングレードできないように注意してください。そうしないと、ユーザーの更新時にアプリケーションのアンインストール/インストールが必要になったときにINSTALL_FAILED_PERMISSION_DOWNGRADEエラーが発生します。
これは、悪意のあるアプリにオーバーレイ権限を付与したときに起こります。 Googleに属していないすべてのアプリで、オーバーレイ設定に移動してオーバーレイ機能を無効にしてください。
私は私のSony Xperia Z3(Dual Sim)をAndroid 6.0.1(Marsmallow)に更新しました。スクリーンオーバーレイの問題があります。私のために私は(私が読んだ解決策として)クリーンマスター、デュスピード、またはデュブースターを持っていません。
だから私は私の解決したスクリーンオーバーレイアプリを探しています。
画面オーバーラップアプリは、ホーム画面を離れることなくメインホーム画面上の他のアプリにアクセスするために使用できるアプリです。だから私のためにここに私の状況ではスクリーンオーバーレイアプリはOMNI SWIPEでした。あなたがこの問題に直面しているのであればあなたはあなたのアプリのどれがスクリーンオーバーレイアプリの定義に適合するかを落ち着かせてチェックする必要があります。
アプリを見つけてアンインストールしてから、携帯を再起動してください。
私はこれを終えたばかりで、電話で楽しい時間を過ごしています。
運の良さ
このポップアップは、マニフェストによって宣言された manifest.PERMISSION.SYSTEM_ALERT_WINDOW 権限によって引き起こされます。
3つのカテゴリの権限があり、開発者は以下の点に注意する必要があります。
通常の許可 - 彼らと何もしないで、ただマニフェストで宣言する
脆弱な権限 - マニフェストで宣言し、最初に権限を要求します。それらはシステム設定によって変更することができます。
上記の危険な許可:SYSTEM_ALERT_WINDOWおよびWRITE_SETTINGSはこのカテゴリに属します。付与する必要がありますが、システム設定には表示されません。それを要求するためにあなたは標準的な方法(int checkSelfPermission(String permission))を使いません、しかしあなたはSettings.canDrawOverlays()またはSettings.System.canWrite()を適切に実行すると、そうしないと例外が発生します。
ウィンドウAndroid.view.ViewRootImpl$W@1de28adを追加できません - このウィンドウタイプではアクセス許可が拒否されました
1 - 下記のように、自分のコードで自分自身でこの許可を要求します。
public class MainActivity extends AppCompatActivity {
public final static int REQUEST_CODE = 10000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkDrawOverlayPermission()) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
public boolean checkDrawOverlayPermission() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
return false;
} else {
return true;
}
}
@Override
@TargetApi(Build.VERSION_CODES.M)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (Settings.canDrawOverlays(this)) {
Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
}
}
}
リストに表示されているすべてのアプリのオーバーレイを無効にする必要があります。この方法でのみ、あなたが必要とするアプリの権限を変更することができます。私はセーフモードでそれをやった、そしてそれはうまくいった。最後に私は電話を再起動し、今それは正常に動作しています。
解決策は
onRequestPermissionsResultメソッドからToastメッセージを削除