如何在屏幕锁定时显示来电屏幕?
How to show the incoming call screen when the screen is locked?
我正在开发我的自定义呼叫应用程序,例如 Skype,当我收到 fcm 消息时,我需要向用户显示 "incoming call" 屏幕。为此,我使用全屏意图通知。我现在的代码是这样的:
val intent = Intent(Intent.ACTION_MAIN, null)
val fakeIntent = Intent()
intent.flags = Intent.FLAG_ACTIVITY_NO_USER_ACTION or Intent.FLAG_ACTIVITY_NEW_TASK
intent.setClass(ctx, IncomingCallActivity::class.java!!)
val pendingIntent = PendingIntent.getActivity(ctx, 1, intent, 0)
val pendingIntent2 = PendingIntent.getActivity(ctx, 1, fakeIntent, PendingIntent.FLAG_ONE_SHOT)
val builder = Notification.Builder(ctx)
builder.setOngoing(true)
builder.setPriority(Notification.PRIORITY_HIGH)
// Set notification content intent to take user to fullscreen UI if user taps on the
// notification body.
builder.setContentIntent(pendingIntent)
// Set full screen intent to trigger display of the fullscreen UI when the notification
// manager deems it appropriate.
builder.setFullScreenIntent(pendingIntent, true)
// Setup notification content.
builder.setSmallIcon(R.mipmap.ic_launcher)
builder.setContentTitle("Call from Vitalii")
builder.setContentText("Your notification content.")
builder.setAutoCancel(true)
// Use builder.addAction(..) to add buttons to answer or reject the call.
val acceptAction = Notification.Action.Builder(Icon.createWithResource(ctx, R.drawable.ic_launch), "Accept", pendingIntent).build()
val declineAction = Notification.Action.Builder(Icon.createWithResource(ctx, R.drawable.ic_launch), "Decline", pendingIntent2).build()
builder.addAction(acceptAction)
builder.addAction(declineAction)
val notificationManager = ctx.getSystemService(
NotificationManager::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel("callnotification", "Incoming Calls", NotificationManager.IMPORTANCE_MAX)
val ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
channel.setSound(ringtoneUri, AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build())
notificationManager.createNotificationChannel(channel)
builder.setChannelId("callnotification")
}
val notification = builder.build()
notification.flags = Notification.FLAG_INSISTENT
currentNotificationId = Random().nextInt(500)
intent.putExtra("notifid", currentNotificationId)
notificationManager.notify("callnotification", currentNotificationId, notification)
当屏幕解锁时,我会收到带有接听和拒接电话按钮的来电通知。但是当屏幕被锁定时,我只会收到声音和振动,而不会收到带有电报、whatsup 和 viber 中的按钮的自定义屏幕。如何在设备锁定时显示此类自定义屏幕?
在您的 CallActivity 中添加以下代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
我正在开发我的自定义呼叫应用程序,例如 Skype,当我收到 fcm 消息时,我需要向用户显示 "incoming call" 屏幕。为此,我使用全屏意图通知。我现在的代码是这样的:
val intent = Intent(Intent.ACTION_MAIN, null)
val fakeIntent = Intent()
intent.flags = Intent.FLAG_ACTIVITY_NO_USER_ACTION or Intent.FLAG_ACTIVITY_NEW_TASK
intent.setClass(ctx, IncomingCallActivity::class.java!!)
val pendingIntent = PendingIntent.getActivity(ctx, 1, intent, 0)
val pendingIntent2 = PendingIntent.getActivity(ctx, 1, fakeIntent, PendingIntent.FLAG_ONE_SHOT)
val builder = Notification.Builder(ctx)
builder.setOngoing(true)
builder.setPriority(Notification.PRIORITY_HIGH)
// Set notification content intent to take user to fullscreen UI if user taps on the
// notification body.
builder.setContentIntent(pendingIntent)
// Set full screen intent to trigger display of the fullscreen UI when the notification
// manager deems it appropriate.
builder.setFullScreenIntent(pendingIntent, true)
// Setup notification content.
builder.setSmallIcon(R.mipmap.ic_launcher)
builder.setContentTitle("Call from Vitalii")
builder.setContentText("Your notification content.")
builder.setAutoCancel(true)
// Use builder.addAction(..) to add buttons to answer or reject the call.
val acceptAction = Notification.Action.Builder(Icon.createWithResource(ctx, R.drawable.ic_launch), "Accept", pendingIntent).build()
val declineAction = Notification.Action.Builder(Icon.createWithResource(ctx, R.drawable.ic_launch), "Decline", pendingIntent2).build()
builder.addAction(acceptAction)
builder.addAction(declineAction)
val notificationManager = ctx.getSystemService(
NotificationManager::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel("callnotification", "Incoming Calls", NotificationManager.IMPORTANCE_MAX)
val ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
channel.setSound(ringtoneUri, AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build())
notificationManager.createNotificationChannel(channel)
builder.setChannelId("callnotification")
}
val notification = builder.build()
notification.flags = Notification.FLAG_INSISTENT
currentNotificationId = Random().nextInt(500)
intent.putExtra("notifid", currentNotificationId)
notificationManager.notify("callnotification", currentNotificationId, notification)
当屏幕解锁时,我会收到带有接听和拒接电话按钮的来电通知。但是当屏幕被锁定时,我只会收到声音和振动,而不会收到带有电报、whatsup 和 viber 中的按钮的自定义屏幕。如何在设备锁定时显示此类自定义屏幕?
在您的 CallActivity 中添加以下代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);