she*_*lll 10 android screen wakeup
我从BroadcastReceiver启动一个活动,它由alaram(RTC_WAKEUP类型)触发.在onCreate的那个活动我添加这些标志
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
);
Run Code Online (Sandbox Code Playgroud)
问题是有时(大约10%的情况)屏幕无法打开.警报被正确触发(我这里是通知的声音,这也是在接收器的onReceive()中触发的.然后,如果我按下电话的电源按钮,屏幕会亮起,显示我的活动,并立即关闭.那个,电源按钮工作正常.这发生在android 2.3.7上,这里是onReceive()方法
@Override
public void onReceive(Context context, Intent intent) {
m_Context = context;
Bundle extras = intent.getExtras();
final int id = extras.getInt("timer_id");
Intent activityIntent = new Intent(m_Context, MyActivity.class);
activityIntent.putExtra("timer_id", id);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
m_Context.startActivity(activityIntent);
// and now load the alarm sound and play it for the desired time
showFinishedNotification();
}
Run Code Online (Sandbox Code Playgroud)
我想避免使用PowerManager,因为它需要一个权限,并且标志是首选的方式.
什么可能是一个问题?logcat没有显示任何问题......
我在这里参加派对有点晚了,但我已经和我斗争了一段时间了,终于找到了让屏幕每次都解锁的方法.我在onAttachToWindow()事件中添加了标志.通常我是从WakefulBroadcastReceiver执行此操作,因此屏幕平滑过渡,但这取决于用例.
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
//Screen On
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);
}
private void clearFlags() {
//Don't forget to clear the flags at some point in time.
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
Run Code Online (Sandbox Code Playgroud)
根据我对这个主题的经验和研究:
该FLAG_TURN_SCREEN_ON不能用来打开屏幕打开和关闭多次,在你的应用程序.
所述FLAG_TURN_SCREEN_ON只能使用一次打开屏幕时ON 创建新活动(最好是在onCreate()方法)或当重新创建的图.
现在,您可以通过以下方式解决此限制:
这些都不是理想的(实际上它们感觉像黑客)但只是使用更适合您的应用需求的那个.
你可以在这里阅读更多:
问题是有时(大约10%的情况)屏幕不亮
如果我不得不猜测,设备会在活动开始之前重新进入睡眠状态。返回后onReceive()
,设备可以并且将会重新进入睡眠状态,返回后需要一段时间onReceive()
您的活动才会开始。
同样的场景,但替换startActivity()
为startService()
,这就是我必须编写 的原因WakefulIntentService
,它使用 aWakeLock
来确保设备保持唤醒状态足够长的时间以使其完成工作,然后释放WakeLock
.
归档时间: |
|
查看次数: |
7988 次 |
最近记录: |