que oreo notificaciones notificacion lollipop heads flotantes desactivar android android-notifications android-fullscreen

android - oreo - Notificación de pantalla completa solo se muestra como un Heads Up



que es heads up en whatsapp (2)

¡Lo averigué! Era algo estúpido tal como lo sospechaba.

En mi IncomingCallActivity tuve el siguiente bit de código

public void onPause() { super.onPause(); finish(); }

Resulta que algo que tiene que ver con la forma en que se muestran las notificaciones en realidad llama onPause , por lo que termina la actividad.

Gracias a @JohanShogun por intentar ayudar.

He estado golpeando mi cabeza contra la mesa con este problema durante 3 días, por favor, dígame dónde me he desviado.

Cuando recibo una llamada VoIP entrante, trato de mostrar una notificación a pantalla completa, al igual que lo hace PhoneApp. Estoy de acuerdo con los heads up, si el usuario está en una actividad inmersiva. Sin embargo, solo recibo una notificación de heads-up, y nunca obtengo una pantalla completa. Necesito una notificación para ignorar la pantalla de bloqueo también.

Esto es lo que estoy haciendo:

String callJson = call.toJson(uber).toString(); uber.requestWakeState(UberVoice.WAKE_STATE_FULL); final Notification.Builder builder = new Notification.Builder(uber); builder.setSmallIcon(R.drawable.switch_notification); if (image != null) { builder.setLargeIcon(image); } builder.setOngoing(true); PendingIntent inCallPendingIntent = PendingIntent.getActivity(uber, 234, UberVoice.createInCallIntent(), 0); builder.setContentIntent(inCallPendingIntent); builder.setContentText(body); builder.setUsesChronometer(false); builder.setContentTitle(title); builder.setCategory(Notification.CATEGORY_CALL); builder.setVisibility(Notification.VISIBILITY_PUBLIC); builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), AudioManager.STREAM_RING); builder.setVibrate(new long[]{500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500}); builder.setPriority(Notification.PRIORITY_MAX); builder.setTicker(title); builder.setFullScreenIntent(inCallPendingIntent, true); builder.addAction(R.drawable.hangup_action, "Reject", CallService.getPendingIntent(uber, callJson, CallService.REJECT)); builder.addAction(R.drawable.answer_action, "Answer", CallService.getPendingIntent(uber, callJson, CallService.ANSWER)); NotificationManager notificationManager = (NotificationManager) uber.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = builder.build(); notificationManager.notify(INCOMING_CALL_NOTIFICATION_ID, notification);

Aquí está el código creatCallIntent:

public static Intent createInCallIntent() { Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_USER_ACTION); intent.setClassName("<package>", IncomingCallActivity.class.getName()); return intent; }

Y aquí está el IncomingCallActivity.onCreate ()

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON; getWindow().addFlags(flags); setContentView(R.layout.activity_incoming_call);

He intentado iniciar esta actividad directamente (uber es referencia de aplicación)

Intent incomingCallIntent = new Intent(uber, IncomingCallActivity.class); String callJson = call.toJson(uber).toString(); incomingCallIntent.putExtra("call", callJson); incomingCallIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); uber.startActivity(incomingCallIntent);

¿Qué estoy haciendo mal?


Si entendí su pregunta correctamente, olvidó agregar el indicador WindowManager.LayoutParams.FLAG_FULLSCREEN en IncomingCallActivity

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().addFlags(flags);

Esta combinación es necesaria para mostrar la actividad mientras la pantalla está bloqueada. Espero eso ayude.