【发布时间】:2019-08-17 01:38:28
【问题描述】:
您好,我正在为应用程序开发 VoIP 功能,并且正在尝试处理应用程序被终止时的情况。我的想法是使用 FCM 通知并运行将显示用户来电屏幕的活动。手机解锁时按预期工作,但手机锁定时则不然。
我试过这个:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
}else{
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
我尝试将标志添加到清单中的活动,但没有运气。我还尝试将它放在 super.onCreate() 之前 super.onCreate() 之后以及 setContentView() 之后,但没有运气。
我只想要与 Viber 和 WhatsApp 相同的行为。但目前我不知道他们是如何做到的。
我在最新更新的 PocoPhone F1 上测试了上述代码。
编辑
这是 FirebaseMessagingService 的一部分,我在其中接收和处理推送通知
public class NotificationService extends FirebaseMessagingService {
private static final String TYPE = "type";
private static final String VIDEO_CALL = "video_call";
@Override public void onMessageReceived(RemoteMessage remoteMessage){
Map<String,String> data = remoteMessage.getData();
if(data.containsKey(TYPE) && data.get(TYPE).equals(VIDEO_CALL)){
Intent videoCallIntent = new Intent(this, VideoCallActivity.class);
videoCallIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(videoCallIntent);
}
}
}
这里是推送通知负载
{
"to": "...",
"data" : {
"type" : "video_call"
},
"priority":"high",
"ttl": 3600
}
更新:
我设法解决了这个问题。Alex 的答案是正确的,但小米设备在我需要启用的设置中有“在锁定屏幕上显示”选项。这是我对 Android OS 有点失望的原因之一。
【问题讨论】:
-
您能否提供更多与实施相关的信息?您是否发送静默推送消息,这些消息是否到达应用程序?请添加
FirebaseMessagingService实现和发送到应用程序的推送消息json data的完整示例 -
@Alex 我更新了问题
标签: android android-9.0-pie android-background