una samsung prioridad molestar modo interrupciones darle como aplicacion android android-notifications android-5.0-lollipop

android - samsung - ¿La configuración de la notificación de Lollipop() no funciona?



interrupciones de prioridad android (3)

Estoy tratando de escribir una demostración del uso de setVisibility() para controlar lo que aparece en la pantalla de bloqueo de Android 5.0 para una Notification . Sin embargo, no parece haber ningún efecto:

  • El VISIBILITY_PRIVATE predeterminado todavía muestra la Notification privada, no su contraparte pública

  • VISIBILITY_SECRET notificaciones de VISIBILITY_SECRET siguen apareciendo en la pantalla de bloqueo

IOW, todo se comporta como si VISIBILITY_PUBLIC estuviera vigente, al menos cuando probé en un Nexus 7 con la imagen de Android 5.0 que recibimos poco después del lanzamiento de Android 5.0 (versión LPX13D). Así que no sé si el problema está relacionado con mi código, con este dispositivo o con errores en Android.

Tengo dos ediciones de la misma aplicación de muestra:

  • One utiliza NotificationCompat y NotificationManagerCompat

  • El otro usa Notification y NotificationManager con una minSdkVersion de 21 y un targetSdkVersion de 21

(tenga en cuenta que estos proyectos son principalmente para uso dentro de Android Studio; los usuarios de Eclipse pueden importar los proyectos pero pueden requerir correcciones menores, en particular para las referencias a la biblioteca support-v13 para la primera muestra)

Las muestras utilizan AlarmManager para activar el trabajo de Notification , principalmente para que tenga la oportunidad de volver a la pantalla de bloqueo para ver los resultados. Aquí está el BroadcastReceiver que es activado por AlarmManager (mostrando la versión de NotificationCompat ):

/*** Copyright (c) 2014 CommonsWare, LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. From _The Busy Coder''s Guide to Android Development_ http://commonsware.com/Android */ package com.commonsware.android.lollipopnotify; import android.app.Notification; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.provider.Settings; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; public class AlarmReceiver extends BroadcastReceiver { private static final int NOTIFY_ID=1337; static final String EXTRA_TYPE="type"; @Override public void onReceive(Context ctxt, Intent i) { NotificationManagerCompat mgr=NotificationManagerCompat.from(ctxt); switch (i.getIntExtra(EXTRA_TYPE, -1)) { case 0: notifyPrivate(ctxt, mgr); break; case 1: notifyPublic(ctxt, mgr); break; case 2: notifySecret(ctxt, mgr); break; case 3: notifyHeadsUp(ctxt, mgr); break; } } private void notifyPrivate(Context ctxt, NotificationManagerCompat mgr) { Notification pub=buildPublic(ctxt).build(); mgr.notify(NOTIFY_ID, buildNormal(ctxt).setPublicVersion(pub).build()); } private void notifyPublic(Context ctxt, NotificationManagerCompat mgr) { mgr.notify(NOTIFY_ID, buildNormal(ctxt) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .build()); } private void notifySecret(Context ctxt, NotificationManagerCompat mgr) { mgr.notify(NOTIFY_ID, buildNormal(ctxt) .setVisibility(NotificationCompat.VISIBILITY_SECRET) .build()); } private void notifyHeadsUp(Context ctxt, NotificationManagerCompat mgr) { mgr.notify(NOTIFY_ID, buildNormal(ctxt) .setPriority(NotificationCompat.PRIORITY_HIGH) .build()); } private NotificationCompat.Builder buildNormal(Context ctxt) { NotificationCompat.Builder b=new NotificationCompat.Builder(ctxt); b.setAutoCancel(true) .setDefaults(Notification.DEFAULT_ALL) .setContentTitle(ctxt.getString(R.string.download_complete)) .setContentText(ctxt.getString(R.string.fun)) .setContentIntent(buildPendingIntent(ctxt, Settings.ACTION_SECURITY_SETTINGS)) .setSmallIcon(android.R.drawable.stat_sys_download_done) .setTicker(ctxt.getString(R.string.download_complete)) .addAction(android.R.drawable.ic_media_play, ctxt.getString(R.string.play), buildPendingIntent(ctxt, Settings.ACTION_SETTINGS)); return(b); } private NotificationCompat.Builder buildPublic(Context ctxt) { NotificationCompat.Builder b=new NotificationCompat.Builder(ctxt); b.setAutoCancel(true) .setDefaults(Notification.DEFAULT_ALL) .setContentTitle(ctxt.getString(R.string.public_title)) .setContentText(ctxt.getString(R.string.public_text)) .setContentIntent(buildPendingIntent(ctxt, Settings.ACTION_SECURITY_SETTINGS)) .setSmallIcon(android.R.drawable.stat_sys_download_done) .addAction(android.R.drawable.ic_media_play, ctxt.getString(R.string.play), buildPendingIntent(ctxt, Settings.ACTION_SETTINGS)); return(b); } private PendingIntent buildPendingIntent(Context ctxt, String action) { Intent i=new Intent(action); return(PendingIntent.getActivity(ctxt, 0, i, 0)); } }

El EXTRA_TYPE se está configurando desde un Spinner en la actividad. Esa lógica parece estar bien, porque el escenario de Notification heads-up funciona bien. Y si paso por el código (por ejemplo, punto de interrupción en onReceive() ), lo veo en las rutas correctas (por ejemplo, llamando a setVisibility(NotificationCompat.VISIBILITY_SECRET) en notifySecret() cuando elijo elevar una Notification secreta).

Por lo tanto, no entiendo por qué no obtengo los efectos de visibilidad en la pantalla de bloqueo de Android 5.0.

¿Alguna sugerencia?


Además de la respuesta de Tanis.7x: tiene que elegir cualquier protector de la pantalla de bloqueo que no sea Deslizar para "Ocultar contenido de notificación sensible" en la sección Sonidos y notificaciones


Configurando NotificationBuilder#setPriority(Notification.PRIORITY_MIN); también evita que se muestre una notificación en la pantalla de bloqueo.

Sorprendente, pero al menos estaba bien documentado.


El comportamiento que está describiendo es consistente con el comportamiento que experimento cuando configuro mi preferencia de notificación de bloqueo de pantalla para "mostrar todo el contenido de las notificaciones".

Esta configuración tiene tres opciones:

  • Mostrar todo el contenido de las notificaciones hace que todas las notificaciones (independientemente de la visibilidad) sean públicas.

  • Ocultar contenido de notificación sensible respeta los nuevos tipos de visibilidad.

  • No mostrar notificaciones en absoluto hará que todas las notificaciones sean efectivamente secretas.

La opción para cambiar la visibilidad de la notificación de la pantalla de bloqueo se encuentra en la configuración del dispositivo en Sonido y notificaciones> "Cuando el dispositivo está bloqueado", como se muestra a continuación.

Como Selvin señaló en su respuesta , la opción de ocultar contenido confidencial solo está disponible si ha configurado algún tipo de bloqueo de dispositivo (como un PIN o un patrón de bloqueo). Si puede desbloquear su dispositivo con solo deslizar la pantalla de bloqueo, esta opción no estará disponible.