AlertDialog被活动隐藏

时间:2017-06-20 03:29:13

标签: android alertdialog android-alertdialog

短篇小说:显示特定活动时,我的对话框将被隐藏。当显示其他活动时,可以很好地看到对话框。

长篇故事:我有一个使用以下标志的活动:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
  WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES);

当您将手机贴在脸上时,它还会使用PROXIMITY_SCREEN_OFF_WAKE_LOCK来关闭屏幕。

此活动在清单中定义如下:

<activity
    android:name=".ui.MyHidingActivity"
    android:configChanges="orientation|screenSize"
    android:launchMode="singleInstance"
    android:windowSoftInputMode="stateHidden"></activity>

现在,当我想要创建并显示此对话框的应用程序中发生事件时:

KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("com.mycompany.myproject");
kl.disableKeyguard();

PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK, "My_App");
wl.acquire();

final AlertDialog alertDialog = new AlertDialog.Builder(tabActivity).create();
            alertDialog.getWindow().addFlags(
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
  | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
  | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
  | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
alertDialog.setTitle("Incoming Event");
alertDialog.setMessage("You have an incoming event.");
alertDialog.show();
wl.release();

当显示任何其他活动时,对话框显示正常隐藏 隐藏的<{strong> 强>对话无论出于何种原因。知道可能是什么问题吗?

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。

问题发生在new AlertDialog.Builder(tabActivity).create()我传入主要活动的地方。这并不仅仅将此活动用作任何旧的Context。该对话框显示在该活动的顶部。但是MyHidingActivity与主要活动不是同一个活动,所以它隐藏了主要活动和它附加的对话框。

要解决此问题,您必须在所有其他活动之上显示对话框。为此你必须:

  1. 将应用程序用作上下文:new AlertDialog.Builder(this).create()(其中&#34;这个&#34;是我的 应用程序)
  2. 使对话框成为系统对话框:

    alertDialog.getWindow()的setType(WindowManager.LayoutParams的 TYPE_SYSTEM_ALERT 即可。);