android - 手机锁定时从服务启动活动 Android 9.0(Pie)
问题描述
您好,我正在为该应用程序开发 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 有点失望的原因之一。
解决方案
还通过在 if 语句中添加此请求(在 之后)请求KEYGUARD_SERVICEsetTurnScreenOn(true);
以解除更高的 API 级别:
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager!= null) {
keyguardManager.requestDismissKeyguard(this, null);
}
推荐阅读
- docker - 以具有读写访问权限的用户模式启动 docker 容器
- powerbi - 以 YTD 方式计算分类字段 - PowerBI DAX
- sql - 从表中删除重复的记录不起作用
- python - 在 Python 中计算两个格式化日期之间的天数会导致“OverflowError: int too big to convert”
- javascript - 点击后清除输入数据
- php - 使用 PHP 和 MySQL 查询多个表
- verilog - 测试台 clk 不前进
- tsql - 如何从累积值创建总计
- firebase - Firestore 安全规则限制字段条目
- html - 视频不会在旧版 Microsoft Edge 中自动播放