マシュマロが登場した後、Androidはセキュリティレベルをより厳しくしますが、
SYSTEM_ALERT_WINDOW
フローティングアクションなどを表示できます。onCreate()
メソッドでコードをフォローすることで、ユーザーに許可を与えることができます。このコードをsetContentViewの後に配置します。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(myIntent);
}
このアクションACTION_MANAGE_OVERLAY_PERMISSION
は、「他のアプリの上に描画」許可画面を直接起動します。
編集:上記のコードは100%正しく機能します
しかし、私はまだ多くの人が、ACTION_MANAGE_OVERLAY_PERMISSION
ユーザーが一度許可を許可した場合のように永続的に許可する方法を探していることがわかりました。その後、アプリケーションを開くたびにそれを尋ねないでください。解決策を聞いてください-
デバイスにAPI23以降があるかどうかを確認します
23以上のAPIの場合、ユーザーに許可があるかどうかを確認します
一度許可を得た場合は彼を運転せSettings.ACTION_MANAGE_OVERLAY_PERMISSION
ず、まだ許可していない場合は実行時の許可チェックを依頼
onCreate()
メソッドに以下の行を入力します。これを後に置くsetContentView
checkPermission();
次に、以下のコードを入力します onActivityResult
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
checkPermission();
} else {
}
}
}
最後に、checkPermissionメソッドコード
public void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
}
そして、クラスでこのパブリック変数を宣言することを忘れないでください
public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 5469;