StandOut window 在 Marshmallow 中设置 Key Guard 时在来电期间不显示

StandOut window not shown during incoming call when key guard is set in Marshmallow

我在我的应用程序中使用了 Mark Wei 令人难以置信的库 StandOut: http://pingpongboss.github.io/StandOut/

我所做的与TrueCaller App

非常相似

在来电时显示我自己的视图。 这通常效果很好。

我的问题是什么?

关于一个非常具体的案例:

然后,应用程序的 StandOut window 会在来电 window 之后发回,除了闪烁几分之一秒外不会显示。

我尝试了什么?

同时使用这两个标志:

此外(和单独)我尝试了这种不推荐使用的方式:

KeyguardManager.KeyguardLock mLock;
KeyguardManager mKeyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
mLock = mKeyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
mLock.disableKeyguard();

当这也失败时,我尝试授予我的应用程序管理员权限(我不会添加整个代码来完成它,因为它很长但我做对了)然后尝试了这个:

devicePolicyManager.setKeyguardDisabled(deviceAdmin,true);

注意:我想再次强调,我知道这是可能的,因为 TrueCaller App 做得很好并且每次调用都不会失败。只需要帮助找到正确的方法。

提前致谢!

我有三个建议供您尝试(不确定它们是否有效),但它们值得一试。

  1. 尝试添加这些标志:

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
  2. 尝试在触发 StandOut 之前添加 2 秒的延迟 window activity 以确保它在来电系统屏幕之后出现(稍后,如果这样可以解决问题,请尽可能减少延迟。

  3. 在这里也找到了这个答案,不确定你是否有权访问 window 属性,但看到了这个解决方案:

    "We were also facing similar issue that the overlay was not displayed on a device with pin lock. The solution that worked for us is below:

    mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
        mParams = new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT,
            LayoutParams.TYPE_SYSTEM_ERROR,
            LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);
    

    LayoutParams.TYPE_SYSTEM_ERROR
    造成了差异。"

    类似的问题:Pop up window over Android native incoming call screen like true caller Android app

希望这里的东西对你有帮助,如果解决了欢迎更新

更新: 问题已解决:(添加):

LayoutParams.TYPE_SYSTEM_ERROR

请确保在布局膨胀之前添加它,否则它什么都不做。

我有同样的问题...我正在尝试制作一个在来电和去电时弹出 activity 的应用...

我的应用程序运行良好,但在 android 6 和 "KEYGUARD" 处于活动状态时除外。

我尝试了一些可以帮助您找到解决方案的方法

我尝试将 window 管理器与 (TYPE_SYSTEM_ERROR) 一起使用并扩展布局以在来电上显示屏幕 它成功运行并在系统调用屏幕上显示了布局 android 6 但我发现了另一个问题..

此解决方案在键盘锁未通过图案锁或密码锁保护时工作正常...如果键盘锁使用滑动解锁并且它没有任何锁定模式,则解决方案工作正常但如果keyguard 有任何型号的锁,自定义 activity 屏幕将再次显示在系统调用屏幕上,但是 activity 的代码(例如 clicklistener 或按钮代码)根本不起作用 ...

顺便说一句,我发现了一些应用程序,它正是你和我尝试制作的 你可以在这里找到它 : Caller Screen OS9 ID Themes

希望对您有所帮助。

如果找到解决方案请更新

抱歉我的英语不好