相关疑难解决方法(0)

SYSTEM_ALERT_WINDOW - 如何在Android 6.0和targetSdkVersion 23上自动获得此权限

Facebook,Evernote,Pocket - 所有应用程序都会自动在Android 6.0上获得此权限,即使它们的目标是23(targetSdkVersion=23).

关于新的Marshmallow权限模型有很多文档.其中一个SYSTEM_ALERT_WINDOW被"提升"为"高于危险"的权限级别,因此需要特殊的用户干预才能授予应用程序这些权限.如果应用程序有targetSdkVersion22或更低,app会自动获得此权限(如果在清单中请求).

但是,我注意到一些获得此权限的应用程序,无需将用户发送到设置特殊页面的Draw over other apps权限.我看到Facebook,Evernote,Pocket - 也许还有更多.

任何人都知道在没有用户通过的情况下如何授予应用程序此权限Settings -> Apps -> Draw over other apps

谢谢

android android-permissions target-sdk system-alert-window android-6.0-marshmallow

73
推荐指数
4
解决办法
6万
查看次数

在后台运行时显示弹出窗口?

我正在尝试从扩展服务的类中打开一个活动。当应用程序不在前台/未使用时,我正在执行此任务。我可以在日志中看到我的服务类触发了带有 Intent.FLAG_ACTIVITY_NEW_TASK 标志的启动活动。但是活动打不开。但是当应用程序处于前台/正在使用时服务触发相同的活动时,活动会打开。

经过几次搜索,我发现我需要在应用程序设置的其他权限部分中手动授予“在后台运行时显示弹出窗口”权限。

显示在其他应用程序权限 SYSTEM_ALERT_WINDOW 上只能访问“显示弹出窗口”。

其他权限

在上图中,SYSTEM_ALERT_WINDOW 只会授予您对“显示弹出窗口”的访问权限,如果应用程序处于前台/正在使用,则此方法可以正常工作,但如果授予标记为红色的权限,您将可以直接从类中打开任何活动延伸服务。

如何检查或要求用户授予“在后台运行时显示弹出窗口”权限?或者此权限是否受到限制?

我看到像 Whatsapp 这样的应用程序默认选中了这个。

java android android-service android-permissions

18
推荐指数
3
解决办法
1万
查看次数

窗口类型 2038 的权限被拒绝

我正在修复一个不是我开发的 android 应用程序,几天前客户端要求我将 targetSdkVersion 设置为 26(之前是 14),之后我注意到应用程序在某些情况下崩溃,例如崩溃时显示 ProgressDialog。这是存在此问题的代码部分:

mProgressDialog.setTitle(getString(R.string.downloading_data));
mProgressDialog.setMessage(mAlertMsg);
Drawable icon = getActivity().getDrawable(android.R.drawable.ic_dialog_info);
icon.setColorFilter(Color.parseColor("#00cbac"), PorterDuff.Mode.SRC_ATOP);
mProgressDialog.setIcon(icon);
mProgressDialog.setIndeterminate(true);
mProgressDialog.setCancelable(false);
mProgressDialog.setButton(getString(R.string.cancel), loadingButtonListener);
mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mProgressDialog.show();
Run Code Online (Sandbox Code Playgroud)

执行最后一行时,应用程序崩溃并在 Logcat 中出现此错误:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@b784d3a -- permission denied for window type 2003
Run Code Online (Sandbox Code Playgroud)

当应用程序运行在具有Android 8和9的设备上时会出现此问题。我寻找了类似问题的解决方案,发现使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY代替会更好TYPE_SYSTEM_ALERT,然后我修改了我写的代码的倒数第二行在这篇文章中,但它没有改变任何东西,应用程序崩溃了,并且在日志中出现了这个错误:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@b784d3a -- permission denied for window type 2038
Run Code Online (Sandbox Code Playgroud)

在清单中,我有权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Run Code Online (Sandbox Code Playgroud)

我还从设备设置中启用了该应用程序的所有权限。我怎么解决这个问题?

android android-windowmanager android-layoutparams

2
推荐指数
1
解决办法
6994
查看次数