对于我的应用程序,我需要实现类似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);
}
}
此代码在我收到数据推送通知后执行。
答案 0 :(得分:0)
使用setVisiblity()
中的NotificationBuilder
(已添加到21级Android 5.0 Android 5.0中):
notificationBuilder.setVisibility(Notification.VISIBILITY_PUBLIC);
public NotificationCompat.Builder setVisibility(int可见性) 设置Notification.visibility。
参数
visibility int (可见性诠释): Notification.VISIBILITY_PRIVATE (默认), Notification.VISIBILITY_PUBLIC 或 Notification.VISIBILITY_SECRET 之一。
答案 1 :(得分:0)
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED在Android Q中已弃用。相反,您可以在Activity的onCreate中使用Activity.setShowWhenLocked(true)和Activity.setTurnScreenOn(true)在锁定屏幕中显示活动。