android - 屏幕锁定时从后台启动活动
问题描述
我正在开发 VOIP 应用程序,最近遇到了一个问题。当屏幕锁定且应用程序处于后台时,某些设备不会唤醒。我做了一些测试,发现:
- 如果应用程序通过后退按钮关闭(任务被破坏)然后屏幕被锁定并调用 startActivity() - 屏幕被解锁并且活动正常工作
- 如果有一段时间没有启动应用程序(尚未创建任务),则屏幕被锁定并调用 startActivity() - 屏幕被解锁并且活动正常工作
- 如果应用程序在前台,则屏幕被锁定并调用 startActivity() - 屏幕被解锁并且活动正常工作
- 如果用户按下 HOME 按钮,从而将任务置于后台,然后屏幕被锁定并调用 startActivity() - 它不起作用,屏幕关闭并且不调用活动的 onCreate
所以,我想这与主页按钮或屏幕锁定时应用程序处于后台的事实有关。当接收到 firebase 消息或 JNI 触发一些回调时,应用程序调用 startActivity()
这是我解锁屏幕的方法:
if (powerManager != null) {
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "App:wakeuptag");
wakeLock.acquire(1000 * 60);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
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
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
} else {
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
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
}
这是我开始活动的方式:
Intent intent = new Intent(context, VCEngine.appInfo().getActivity(ActivityType.CALL));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NO_ANIMATION);
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mIsCallFromBackground.set(!AppUtils.isAppOnForeground());
}
intent.putExtra(
context.getString(R.string.extra_conference_join_or_create),
msg);
intent.putExtra(context.getString(R.string.extra_is_audio_call), isAudioCall);
intent.putExtra("isConference", isConference());
context.startActivity(intent);
解决方案
推荐阅读
- r - 用空格替换字符并将字符串分成R中的两个单词
- r - 闪亮的 *for* 循环自动下载绘图
- javascript - 如何调用在firebase firestore中声明的变量
- javascript - 如何比较两个数组中的数据并在javascript中返回不匹配的数组?
- sql - SQL to_char 舍入 '9999.99'
- ios - SKStoreReviewController.requestReview() 本地化不起作用
- clojure - 我如何在 clojure 中使用环处理程序服务器静态 html 文件?
- flutter - 构建flutter应用程序的APK时任务':sms:verifyReleaseResources'执行失败
- vb.net - VB.net 一个子用于许多事件
- git - .gitignore not preventing a directory being pushed to github