如果用户在显示通知时尝试授予权限,则 Android“检测到屏幕覆盖”消息
Posted
技术标签:
【中文标题】如果用户在显示通知时尝试授予权限,则 Android“检测到屏幕覆盖”消息【英文标题】:Android "Screen Overlay Detected" message if user is trying to grant a permission when a notification is showing 【发布时间】:2016-05-28 23:36:19 【问题描述】:我在 Nexus 6 上安装了 android Marshmallow。我正在尝试解决以下问题:
如果用户在显示通知时尝试授予权限,则会显示“检测到屏幕覆盖”消息,并且“请求权限”对话框消失 - 当然,该应用没有获得请求的权限。 (查看截图)
我尝试通过在清单中添加“DRAW OVER OTHER APPS”权限 - android.permission.SYSTEM_ALERT_WINDOW 来解决此问题,但没有成功。
PS:我确定问题是由通知引起的。我没有安装任何覆盖其他应用程序的应用程序,我什至在设置中关闭了所有具有“绘制其他应用程序”权限的应用程序。没有帮助..
有人知道这个问题的解决方案吗?
【问题讨论】:
见android.stackexchange.com/questions/126798/… @gsgsgs 我没有任何应用程序可以覆盖其他应用程序。无论如何,我在设置中关闭了所有具有“绘制其他应用程序”权限的应用程序。没有帮助。正如我在问题中提到的,问题是由通知引起的,而不是由应用引起的。 这不是你要在代码中“修复”的东西。这是 Android 中的一个错误(或者充其量是一个经过深思熟虑的错误消息),Google 应该希望在未来的版本中修复它。 facebook Messenger 打开时发生在我身上(在后台) 如果显示吐司也会发生这种情况。 【参考方案1】:在我遇到的情况下,我自己造成了问题。这是在我请求许可的同时使用Toast
向用户显示信息的结果。这两种操作共同导致此类错误。
其他答案可能会解决其他人的问题。但我想指出,您应该小心导致自己的叠加错误。在请求许可的同时,请注意在视图中覆盖某些内容。
【讨论】:
我遇到了同样的问题,我删除了 toast 并且它停止出现。 面临同样的问题。删除了 Toast 并像魅力一样工作 用这个解决方案解决了完全相同的问题。在请求许可之前,我正在显示一条祝酒消息。 这为我解决了。正在使用Toast
进行调试。这也可能是人们出现这种情况的主要原因。
Toast to display information to the user at the same time that I was asking for permission
帮了我..【参考方案2】:
卸载 Clean Master 应用程序。我卸载了,问题解决了
【讨论】:
我试过这个但没有帮助。反而造成了不必要的un安装。 我试过了,它确实有帮助。它导致了必要的卸载。谢谢! (索尼 Xperia Z3) 卸载不应该是一个解决方案。正确答案请查看***.com/a/39826828/2724626。 在我的情况下,它是Facebook Messenger
,无需卸载,只需强制停止。【参考方案3】:
这个问题的出现是因为一些罪魁祸首应用程序,如 Twilight、cleaner-master、drupe 等。
要解决此问题,您必须为那些罪魁祸首应用禁用屏幕覆盖。
我有 moto g4 plus,这就是我解决这个问题的方法
转到设置 --> 选择应用程序 ---> 再次选择应用程序中的设置图标 ---> 选择绘制其他应用程序 ---> 并禁用为其他应用程序带来麻烦的罪魁祸首应用程序。
我所做的是通过禁用此权限来检查每个应用程序并尝试运行我的应用程序,我发现一个应用程序对于其他应用程序来说这个令人不安的覆盖,所以最后我只禁用了这个应用程序。
截图:
【讨论】:
MobileGoConnector 和 Mobile Go 未显示在我的手机中 我现在应该做什么 @KeshavGera 它永远不会.. bcz 它不是内部应用程序,我在外部安装了它。对你来说,这将是导致覆盖问题的不同应用程序。在我的情况下,这两个应用程序导致覆盖问题。 @KeshavGera 你应该通过禁用覆盖权限来检查每个应用程序..【参考方案4】:从此处和其他论坛的多个答案中获得见解。
巩固我是如何摆脱这个问题的:
-
转到设置 > 应用程序 >(您的应用程序出现问题)
按下电源按钮直到出现关机、重启、飞行模式窗口
按住关机选项
在安全模式下选择重启
转到设置 > 应用程序 >(您的应用程序出现问题)
选择您想要的任何权限
Android M 更新后,Messenger、Whatsapp、Prisma 等应用会出现问题。
如果有任何问题,请告诉我。
注意:我正在使用一加一手机。
【讨论】:
但我们作为开发人员希望通过编码来解决解决方案,而不是通过您的这种(在安全模式下重新启动)方法。 你是对的 Rakesh,这不是理想的解决方案。但到目前为止,我还没有任何其他适用于我的手机的解决方案。 现在为我工作!!希望谷歌在 Nougat+ 版本中修复它。【参考方案5】:此弹出窗口是由清单声明的manifest.PERMISSION.SYSTEM_ALERT_WINDOW 权限引起的。
开发者必须注意的 3 类权限:
普通许可 - 对它们什么都不做,只需在清单中声明
Vulnerable permissions - 在 Manifest 中声明并在第一时间请求许可。它们可以通过系统设置进行更改。
危险权限以上:SYSTEM_ALERT_WINDOW和WRITE_SETTINGS属于这一类。它们必须被授予,但在系统设置中不可见。要请求它,您不使用标准方式(int checkSelfPermission(字符串权限)),但您必须检查 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();
【讨论】:
【参考方案6】:我刚刚删除了我的应用并关闭了我的 Nexus 6P。重新打开后,我重新安装了应用程序,并且在授予应用程序权限时不再出现“屏幕覆盖”对话框。
【讨论】:
这更像是评论而不是答案。您可以稍微扩展一下为什么这样做。 How to Answer @AgataB 我是 *** 的新手。我当时没有评论的权利,我不知道为什么关闭手机并卸载应用程序会起作用,我只是认为它可能会有所帮助。【参考方案7】:您必须为您在列表中看到的所有应用禁用覆盖。只有这样,您才能在您需要的应用程序中修改授权。 我已经在安全模式下完成了,它有效。 最后我重新启动了手机,现在它工作正常了。
【讨论】:
【参考方案8】:我将 Sony Xperia Z3 (Dual Sim) 更新为 Android 6.0.1 (Marsmallow)。我一直有屏幕覆盖问题。对我来说,我没有 Clean Master、Du Speed 或 Du Booster(我读过的解决方案)。
所以我解决了寻找任何屏幕覆盖应用程序的问题。
屏幕重叠应用程序是一种应用程序,您可以使用它来访问主主屏幕上的其他应用程序,而无需离开主屏幕。所以对我来说,在我的情况下,屏幕叠加应用程序是 OMNI SWIPE。因此,如果您遇到这个问题,您需要冷静下来并检查您的哪个应用程序符合屏幕覆盖应用程序的定义。
找到应用并卸载,然后重新启动您的手机..
我刚做完这个,玩手机玩得很开心
祝你好运
【讨论】:
【参考方案9】:只要 Android 6.x 在某些设备上无故显示此“覆盖警报”(根据我的分析数据显示在 2% 到 5% 的设备上)存在问题,最好的解决方案就是避免整个通过将targetSdk定义为22来进行权限处理。
请注意,您不能将目标 sdk 降级为新版本,否则当用户更新需要卸载/安装应用程序时,这将引发 INSTALL_FAILED_PERMISSION_DOWNGRADE 错误。
【讨论】:
【参考方案10】:解决办法是
从 onRequestPermissionsResult 方法中删除 Toast 消息
【讨论】:
【参考方案11】:当您向恶意应用授予覆盖权限时会发生这种情况。转到覆盖设置并禁用所有不属于谷歌的应用的覆盖功能,你会很高兴的。
【讨论】:
【参考方案12】:我在安装新应用时遇到了这个问题。 我解决这个问题的方法是手动启用新安装的应用程序的权限(在运行应用程序之前)。 我很确定这尤其是 Android 和三星设备的问题。 希望这会有所帮助
【讨论】:
【参考方案13】:删除CM security、Clean Master等有屏幕覆盖的应用
如果需要,甚至可以删除并尝试使用 Messenger(FB 应用)。
【讨论】:
我试过这个但没有帮助。反而造成了不必要的un安装。 有时安装应用程序是有原因的。 没有。只需重新安装 Clean Master 应用程序和/或 Facebook Messenger 应用程序。这解决了我的问题。以上是关于如果用户在显示通知时尝试授予权限,则 Android“检测到屏幕覆盖”消息的主要内容,如果未能解决你的问题,请参考以下文章
尝试获取 READ_PHONE_STATE 权限时未显示 Android 权限对话框