从locking屏幕上的服务启动活动打开屏幕,但不显示活动本身

我试图从我已经获得锁的服务开始一个活动,如下所示:

Intent i = new Intent(context, MyActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION); startActivity(i); 

活动清单声明如下:

 <activity android:name=".MyActivity" android:configChanges="orientation|screenSize|keyboardHidden|keyboard|navigation" android:excludeFromRecents="true" android:launchMode="singleInstance" android:screenOrientation="nosensor" android:showOnLockScreen="true" android:taskAffinity="" android:theme="@style/MyTheme" /> 

最后, onCreate()onAttachedToWindow() (我都尝试过),我添加以下标志:

 final Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 

问题是,我第一次从我的服务调用startActivity() ,屏幕打开,但活动本身不显示。 它显示locking屏幕。 每一个随后的startActivity()调用都能正常工作,但是我找不到这种奇怪行为的原因。

我已经尝试了一些build议来获得完整的wakelock而不是部分的,根据下面的回答改变清单中的标志和值:

  • 当屏幕被唤醒并且locking屏幕不被禁用时,Android活动不显示
  • BroadcastReceiver被调用时如何解锁屏幕?
  • 以编程方式在Android中打开屏幕
  • Android Galaxy S4 – 在locking屏幕上可见的活动

请注意,我的主题不是对话框,而是全屏活动。

任何其他的想法?

Solutions Collecting From Web of "从locking屏幕上的服务启动活动打开屏幕,但不显示活动本身"

我遇到了同样的问题,经过大量的search和谷歌search,发现这个解锁屏幕,并popup我的活动,但它只适用于我的应用程序正在运行(前景/背景)。

 import android.view.Window; import android.view.WindowManager.LayoutParams; Window window = this.getWindow(); window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 

我试图在应用程序closures时启动一项活动…(使用广播接收器)

在文档(例如这里 )和大多数的答案的标志是这样添加:

  getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

但是当我尝试的方式就像在这个例子中,它解锁了屏幕,而不是只是打开屏幕。

希望这个帮助。 它仍然没有完全解决我的问题。

编辑:

发现这个post解决了我的问题。

有没有使用对话框主题解决了我的评论

由于我的应用程序已经包含了一个Service ,这就是我所做的: 如果屏幕被locking ,我注册一个广播接收器(比这个更简单,因为它只对解锁做出反应),一旦屏幕获得就开始活动解锁。

 Step 1: Add below code in your activity before setContentView(R.layout.activity_about_us); **getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);** Step 2: Lock your mobile than you will see activity in which you have added this code. 

如果你想打开特定的屏幕,如Skype通话发生通知,你可以实现这个。