在 Android Q 的锁定屏幕上收到 fcm 通知后开始活动
Posted
技术标签:
【中文标题】在 Android Q 的锁定屏幕上收到 fcm 通知后开始活动【英文标题】:Starting activity after receive fcm notification on lock screen in Android Q 【发布时间】:2019-11-22 06:29:03 【问题描述】:对于我的应用程序,我需要实现类似 WhatsApp 的行为,当设备被锁定时在锁定屏幕上方显示我的应用程序,并且我在 android Q 以下的 android 版本中成功地做到了。为此,我授予 Settings.ACTION_MANAGE_OVERLAY_PERMISSION
。没有SYSTEM_ALERT_WINDOW permission
,有人知道怎么做吗?对于推送通知,我使用 fcm。
我的代码:
private void tryWakeUp()
try
String ns = getApplicationContext().getPackageName();
String cls = ns + ".MainActivity";
Intent intent = new Intent(getApplicationContext(), Class.forName(cls));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.putExtra("foreground", true);
intent.putExtra("incoming_call", true);
PowerManager pm = (PowerManager) getApplicationContext()
.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl1 = pm.newWakeLock(
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE |
PowerManager.FULL_WAKE_LOCK,
"wl1"
);
wl1.acquire(10000);
Log.d(TAG, "try wake up");
startActivity(intent);
catch (Exception e)
Log.w(TAG, "Failed to open application on message receive", e);
此代码在我收到数据推送通知后执行。
【问题讨论】:
尝试使用我的旧答案:***.com/questions/58723440/… 不幸的是,它对我不起作用 嗨@Denis,我发现Skype,whatapp,messenger做得很完美,但我不知道怎么做,和你的问题一样,你解决了吗?谢谢 【参考方案1】:使用 API 级别 21 Android 5.0 中添加的 NotificationBuilder
中的 setVisiblity()
):
notificationBuilder.setVisibility(Notification.VISIBILITY_PUBLIC);
public NotificationCompat.Builder setVisibility (int 可见性) 设置 Notification.visibility。
参数visibility int:Notification.VISIBILITY_PRIVATE(默认)、Notification.VISIBILITY_PUBLIC或Notification之一.VISIBILITY_SECRET.
【讨论】:
【参考方案2】:WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 在 Android Q 中已弃用。您可以在 Activity 的 onCreate 中使用 Activity.setShowWhenLocked(true) 和 Activity.setTurnScreenOn(true) 在锁定屏幕中显示活动。
【讨论】:
如果在我锁定屏幕之前屏幕上有活动,则此标志有效。但是,如果活动不可见并且我锁定屏幕,然后发送推送通知,那么什么也不会发生。startActivity
不起作用以上是关于在 Android Q 的锁定屏幕上收到 fcm 通知后开始活动的主要内容,如果未能解决你的问题,请参考以下文章
打开应用程序并锁定屏幕时未收到 Ionic FCM 推送通知,除非被点击