【发布时间】:2020-04-12 16:48:20
【问题描述】:
当应用程序正在运行并且设备被锁定时,我可以开始活动。但是,当应用程序处于后台并且设备被锁定时,即使我在 BroadcastReceiver 类中获得了控制权,也无法启动活动。这是我的意图调用。
context.startActivity(new Intent(context, ReceiveCallActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setAction(Intent.ACTION_ANSWER)
.putExtra("title", intent.getStringExtra("title"))
.putExtra("action", intent.getStringExtra("action")));
活动清单
<activity
android:name=".ReceiveCallActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleTop"
android:showOnLockScreen="true"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:windowSoftInputMode="adjustPan|stateHidden" />
ReceiveCallActivity.class
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
} 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);
}
setContentView(R.layout.receive_call_activity);
...
...
}
setShowWhenLocked(true) && setTurnScreenOn(true) 有助于打开应用程序,即使设备被锁定,但应用程序必须在前台。
PS:我在所有情况下都在 BroadcastReceiver 中获得控制权。
TIA
【问题讨论】:
-
不,你不能那样做。您可以在 ReceiveCallActivity 中运行的代码做一件事,您可以在 BroadcastReceiver 中调用它。
-
ReceiveCallActivity 是一个带有 UI 的呼叫应答拒绝屏幕。顺便说一句,Skype 应用程序在所有情况下收到呼叫时都会打开。
-
@Shahal, 1. 您正在尝试哪个版本 2. Android 10 Restricted background activity
-
我正在检查从设置中授予 Skype 的不同权限,并注意到“在锁定屏幕上显示”已启用,而我的应用程序已禁用相同权限。启用后,BroadcastReceiver 能够在所有场景中打开 Activity。我读到这是 Xiamoi 设备的问题(我使用的是 Note 5 Pro)。
-
在 Android 10 上,当应用程序处于后台时,我使用 RemoteViews 显示通知。