0 votos

¿Cómo evitar que la notificación de una aplicación se actualice mientras la pantalla está apagada?

Tengo un contrabandista ROM (Android 9 pie) instalado en un teléfono Motorola Moto E 2015. Tengo un ajuste, habilitado en la configuración de pantalla adaptable, que hace que la pantalla se encienda, cuando se recibe una nueva notificación. Es una buena función, pero mi reproductor de música (AIMP) actualiza su notificación cada vez que una nueva canción comienza a sonar, lo que hace que la pantalla se encienda (pulso) a menudo y use batería adicional. Podría evitarlo desactivando completamente las notificaciones de AIMP, pero quiero ver la notificación cuando la pantalla esté encendida.

¿Es posible evitar que la notificación se actualice mientras la pantalla está apagada?

Otra forma de resolver esto sería apagar las notificaciones para el AIMP, cuando se apaga la pantalla, y luego volver a encenderlas cuando la pantalla se enciende (usando tasker, por ejemplo ). Pero el inconveniente de este enfoque es que una vez encendido, la notificación no aparece hasta la siguiente canción, por lo que no es posible ver la canción actual en la notificación de esta manera.

0voto

acejavelin Puntos 186

La forma preferida sería que si tu reproductor de medios tiene una opción en su configuración para deshabilitar las notificaciones, lo haga de esa manera.

El otro método sería utilizar las características integradas de Android para deshabilitar las notificaciones, cuando aparezca una notificación de su reproductor multimedia, baje el tono de la notificación y pulse durante mucho tiempo la ficha de notificación, y seleccione "Detener notificaciones". Esto deshabilitará las notificaciones quitando los permisos de las aplicaciones para hacerlo. Para volver a habilitar las notificaciones, ve a Configuración - Aplicaciones y busca las aplicaciones, y vuelve a activar las notificaciones allí.

De lo contrario, el dispositivo funciona exactamente como está diseñado con los ajustes que tiene.

0 votos

Sí, pero quiero modificar el funcionamiento del dispositivo con las notificaciones. No quiero desactivar la notificación por completo. Sólo quiero que no se me ilumine la pantalla cuando cambie una canción. También quiero que siga iluminando la pantalla para las notificaciones de otras aplicaciones.

0 votos

@mnd Lamentablemente, no creo que eso sea posible a menos que la aplicación pueda hacerlo por sí misma. Sin embargo, ya que tienes una rom personalizada y supongo que rooteada, hay una herramienta llamada Tasker que permite establecer cosas en un método Trigger - Action. Usted podría establecer un gatillo de pantalla apagada y la posible acción de desactivar las notificaciones de la aplicación, a continuación, la inversa cuando la pantalla en. Tasker es poderoso, sólo que no estoy seguro si es lo suficientemente granular para esta tarea, por lo que no lo incluí en mi respuesta.

0 votos

Sí, Tasker puede hacer eso, tal vez se necesita un plugin de configuración segura para que pueda desactivar las notificaciones por aplicación. El único problema es que una vez que las notificaciones para AIMP están deshabilitadas, y después habilitadas - no aparece hasta que la canción cambia (y la notificación se actualiza). Así que tal vez la pregunta debería ser - cómo solicitar a la aplicación o a Android que recupere la notificación en curso que se había desactivado y vuelto a activar para esa aplicación.

0voto

mnd Puntos 46

Así que, puede que no sea la solución más sofisticada, pero me las arreglé para hacerlo usando el Automatizar app. Tampoco es una solución universal para las notificaciones de todas las aplicaciones, pero funciona para controlar la notificación de un reproductor de música (por lo menos para AIMP), y eso era lo que yo quería hacer.

Utilicé el bloque "Display on" para comprobar si la pantalla está encendida o apagada. También añadí la condición de comprobar si la música se está reproduciendo (usando el bloque "Reproducción multimedia"), para que las notificaciones sólo se activen y desactiven cuando la música se esté reproduciendo. Y para la conmutación real de las notificaciones del AIMP, usé el bloque "Estado de configuración de las notificaciones de la aplicación". Por último, para hacer que la notificación de AIMP aparezca realmente después de que se haya activado, usé el bloque "Control del reproductor de audio" dos veces para hacer una pausa y luego volver a reproducir la música inmediatamente. De esta manera la notificación aparece sin esperar a que empiece la siguiente canción, y como las acciones de pausa y reproducción se ejecutan en secuencia sin demora, no hay ninguna pausa audible en la música.

Actualmente, lo único que me gustaría mejorar es cambiar la condición que comprueba si la música se está reproduciendo a una condición que compruebe si la aplicación del reproductor de música se inicia y sólo entonces comprobaría cuando la pantalla se enciende y se apaga. Con la esperanza de que ayude a ahorrar batería. Pero tendré que ver si hay una diferencia en el consumo de la batería con mi actual flujo automático activado y desactivado. Tal vez la comprobación constante del encendido y apagado de la pantalla no afecte al consumo de la batería de reserva.

Además, tengo que señalar, que había logrado el mismo resultado usando el plugin de configuración de Tasker y Secure. Pero parecía que este enfoque no era tan sensible como el de Automate. Esto puede deberse a que mi teléfono es de baja especificación y no habría diferencia en un dispositivo más potente. Pero basándome en mi corta experiencia con Automate, parece estar mejor optimizado para mi dispositivo y mi uso típico. Probablemente porque Tasker tiene que usar un plugin adicional y Automate tiene las funciones que necesito incorporadas. Sin embargo, si alguien está interesado en la manera de Tasker, puedo editar la respuesta para incluirla con más detalle.

Automate flow

0voto

ULTRACOMFY Puntos 26

Bonita pregunta que tienes ahí. Para resolver eso, te recomiendo que uses el Automático, que, aparentemente, ya lo haces. Quieres evitar que tu aplicación de música parpadee en la pantalla de ambiente cada vez que envíe una notificación, y quieres solucionarlo con Automate de la forma más eficiente posible. En primer lugar, es importante tener un flujo que sólo se ejecute cuando tu reproductor multimedia esté funcionando. Como no puedes establecer "Reproductor de medios en funcionamiento" como condición para iniciar tu flujo (podrías hacer otro flujo que espere a que tu reproductor de medios se inicie, pero de cualquier manera, siempre tendrás un flujo en funcionamiento todo el tiempo), puedes hacer una pequeña solución: Puedes empezar los flujos sólo con tu aplicación de Media Player usando Automatizar. Haz un flujo que inicie tu reproductor multimedia Y el flujo que habilite/deshabilite las notificaciones más adelante:

Start Flow

Este flujo, cuando sea lanzado iniciará el Media Player y otro flujo que mostraré más adelante. Ahora: En la pantalla de inicio predeterminada de Android, puedes agregar atajos. Para ello, puedes ir al editor de diagramas de flujo, hacer clic en el bloque de inicio del flujo y luego en "Instalar un atajo en la pantalla de inicio". Cuando elijas el flujo que acabamos de crear, podrás abrir el flujo y el reproductor multimedia haciendo clic en el botón de tu nueva pantalla de inicio.

Ahora, todavía necesitamos controlar adecuadamente las notificaciones para evitar que aparezcan mientras la pantalla está apagada, mientras consideramos sus deseos. La automatización de CAN comprueba si una aplicación está funcionando o no. Al usar los flujos de la manera que describí aquí, sabemos que el Reproductor de Medios estará funcionando. Lo que podemos hacer es detener el flujo cuando detecte que el Reproductor Multimedia se ha cerrado.

Queremos evitar que el reproductor multimedia publique notificaciones mientras la pantalla está apagada. Por lo tanto, lo que podemos hacer es evitar que el reproductor muestre notificaciones en absoluto. Tenemos una condición: Actualización del Reproductor == true | AND | Pantalla == 'on' Pero, somos inteligentes: Podemos simplemente esperar a que el jugador se actualice, y luego esperar a que la pantalla se encienda. Esta es la forma más eficiente de energía. Tenemos un paso de programación cada vez que la pista cambia/está en pausa/se reanuda/etc - Simplemente forzamos una notificación cada vez que la pista cambia, o cuando la pantalla se enciende la próxima vez después del último cambio de pista.

Our Notification Flow

Está usando el bloque "Habilitar notificaciones". En mi ejemplo elegí "App OP mode set" que es porque uso mucho ese bloque para otras cosas, pero tu bloque también debería estar bien. NOTA: Desactivar las notificaciones mientras la pantalla está encendida podría cancelar la notificación. Si eso se aplica a ti, y el flujo cancela inmediatamente la notificación después de que el Reproductor Multimedia la haya publicado, tienes que añadir un bloqueo que espere hasta que la pantalla se vuelva a apagar. OTRA NOTA: El primer "Está la pantalla encendida" está configurado como "Inmediatamente", mientras que el segundo es "Cuando se cambia". Esto junto hace un "Espera hasta: Pantalla encendida". También se puede hacer eso usando un bloque "Is Display On" ajustado a "Inmediatamente", donde NO se conecta de nuevo a la entrada del bloque, creando así un bucle, pero no queremos tener eso.

Ahora, para la eficiencia de la batería queremos detener este flujo cuando se detenga el reproductor de medios. Pensé que sería fácil, pero en realidad no lo es. Automatizar tiene bloques para ver qué aplicación está en primer plano, pero no ofrece directamente bloques para "Proceso en marcha". Esto tiene dos soluciones obvias: Comandos de Shell. Linux ofrece el comando "ps" para ver los procesos que se están ejecutando, y Automatizar puede ejecutar Comandos de Shell, pero hay una forma mucho más fácil que eso: Estadísticas de uso de Android. Android mantiene un registro de cuándo se ha usado qué aplicación. Podemos hacer uso de eso y determinar si la aplicación está siendo usada ahora mismo. Porque, cuando la última vez que se ha usado es hace más de 60 segundos, podemos asumir con seguridad que está cerrada ahora mismo. Por lo tanto, comprobamos si la aplicación se está ejecutando comparando "App la última vez que se utilizó" con "Hora actual", y si estos valores son más o menos los mismos, la aplicación SE está ejecutando.

Starter Flow, Update

Con el bloque "Uso de aplicaciones" podemos determinar el momento en que se ha utilizado una aplicación y asignar ese valor a una variable. Lo llamé "Tiempo". Consigues ese bloque, y eliges tu Media Player como paquete de aplicaciones. Los valores de la marca de tiempo pueden ser ignorados. Con el bloque "Expression True", ahora puedes comparar ese valor con la hora actual:

enter image description here

También he añadido un buffer de 5 segundos. Entre el momento en que se recuperen los datos de uso de la aplicación y el momento en que se compruebe este bloque pasará algún tiempo, lo que puede llevar a que siempre diga que "La última vez que se usó" es más pequeño que "Ahora". NOTA: "Ahora" es una variable incorporada. NO es necesario reemplazarla.

Si el resultado es NO (App Running), esperará 2 minutos hasta que vuelva a preguntar. Pensé en un bloque de "Media Playing" ajustado a "When Changed", pero eso chocaría con el buffer de cinco segundos. Si el resultado es SÍ (la aplicación no está en marcha), pasará a un bloque de "Parada de Fibra". Con ese bloque, puedes detener fibras específicas, incluso en otros flujos/scripts. Todo lo que necesitas hacer es entrar en la URI que tiene el flujo de Control de Notificaciones. Puedes encontrarla entrando en el script del flujo de Control de Notificación, haciendo clic en el bloque de Inicio de flujo y desplazándote hasta la parte inferior.

Después de todo, ahora tienes dos flujos: El primer flujo abre el Reproductor de Medios y el Segundo Flujo, luego espera a que el Reproductor de Medios se detenga y luego cancela el Segundo Flujo. El segundo flujo controla la notificación de los Reproductores Multimedia desactivándolos completamente, esperando un cambio de pista, luego forzando una notificación, pero sólo cuando la pantalla está encendida.

NOTA: Mi reproductor es raro (no me gusta usarlo en general) y sólo reacciona al Play/Pause. Por lo general, cuando tienes un bloque de "Cuando la reproducción de medios" ajustado a "Cuando se cambia" reacciona a los cambios de pista. Con mi reproductor actual, no lo hace. Si tienes el mismo problema, puedes guardar el título de la música en una variable y compararlo periódicamente con el título de la pista actual. Espero que no tenga que llegar a tal cosa. Buena suerte.

0 votos

Si estas imágenes le parecen borrosas (a mí me lo parecen), puede hacer clic en ellas para verlas a pantalla completa. Si tienes algún problema o duda, pregúntame :)

0 votos

Una vez más, ULTRACOMFY, no puedo agradecerte lo suficiente tu interés y tu ayuda tan completa en mis retos de Android. Lamentablemente no podré probar tu solución por mí mismo y dar mi opinión en los próximos días. No obstante, estoy deseando hacerlo y publicaré mi experiencia en cuanto tenga tiempo de probarla. Después de echar un vistazo rápido, sólo puedo añadir una cosa: no podemos asumir que el reproductor se iniciará siempre con el acceso directo. Por ejemplo, cuando el teléfono está conectado al bluetooth, se abre el reproductor y eso no iniciaría el segundo flujo, probablemente.

0 votos

Probablemente la limitación del bluetooth podría resolverse fácilmente con otro flujo que compruebe cuando el teléfono se conecta a un dispositivo bluetooth específico. Pero eso hace que sean tres flujos para una tarea

0voto

ULTRACOMFY Puntos 26

He leído los comentarios de la otra respuesta que se ha publicado y puedo dar una respuesta: Sí. Sólo hay que tener en cuenta que esta solución NO cuenta con botones de control de Media Player.

Lo que queremos hacer es dos cosas:

1) Evitar que el reproductor multimedia publique notificaciones mientras la pantalla está apagada

2) Crear una notificación cuando la pantalla se vuelva a encender, y sólo cuando el reproductor multimedia no haya creado ya una. ADEMÁS, eliminar nuestra propia notificación tan pronto como el reproductor multimedia vuelva a publicar una.

Lo primero es fácil:

Disable/Enable Notifications depending on Screen Activity State

Utilizando el poder de un bloque "¿Mostrar en?" establecido en "Cuando se cambie", puede activar o desactivar con precisión las notificaciones para su aplicación de reproducción. Cuando el estado de la pantalla cambie a apagado, la fibra pasará por No. El bloque AppOp desactiva el permiso para publicar notificaciones. Si antes usaste el bloque Permitir Notificaciones, puedes usar ese también. Después de deshabilitarlas, la fibra vuelve al bloque "¿Display On?". Ahora, cuando la pantalla cambie a "Activado", procederá a través de Sí y ejecutará el otro bloque AppOp, habilitando las notificaciones nuevamente.

Ahora, este script es fácil y se ejecutará junto a nuestro script que crea una notificación tan pronto como la pantalla se vuelve a encender. Esto vendrá en la segunda parte:

Notification

El bloque "Display On?" en la parte superior es el primer bloque que necesitamos. Está configurado como "When Changed" y sólo procede cuando la pantalla está ENCENDIDA. En cuanto eso ocurra, queremos saber si el reproductor multimedia ya ha publicado una notificación. Para ello, podemos utilizar el bloque "Notification Posted?" (que, en el flujo está etiquetado como "Has notification"). Está configurado como Inmediatamente y simplemente pregunta si una aplicación ha publicado una notificación o no. En este caso, nuestra aplicación es el reproductor multimedia. Tienes que escribirlo en el bloque. Si ya lo ha hecho, no es necesario crear una notificación, por lo que la fibra vuelve a "¿Mostrar On?". Si NO ha creado una notificación, procedemos a crear nuestra notificación.

Quieres que esa notificación diga el Título y el Artista y o Álbum de la pista actual en curso. Para encontrar esa información, utilizamos el bloque "¿Medios en reproducción?" configurado como "Inmediatamente". Puedes asignar muchos valores a las variables, incluyendo Título, Álbum, Artista, Duración (en seg), Posición actual (en seg) y más. Sólo el Título, el Álbum y el Artista son relevantes para nosotros ahora.

Ahora, tienes que escuchar. No podemos simplemente decirle a Automate que cancele la notificación después de un "Tiempo X" (Tiempo de espera) o cuando el "Reproductor multimedia haya cambiado". Tenemos que hacerlo manualmente. Automate no cuenta con una opción de Timeout para las notificaciones (no estoy seguro, pero creo que lo hizo hace mucho tiempo ). Así que, hacemos un script que publica la notificación y espera hasta que se haga clic para abrir el Reproductor de Medios, y hacemos otro que CANCELA esta notificación tan pronto como el Reproductor de Medios publicó uno por sí mismo.

Notification and Notification Cancel Script

El script de la izquierda crea una notificación. Se establece en "Al hacer clic".

NOTIFICATION

En esta notificación, puede establecer el Título y el Mensaje. En lugar de introducir texto plano, también puede utilizar el contenido de las variables, como se conoce por java.println(). Asegúrese de entrar en el modo de introducción de variables, ya que de lo contrario procesará "Título" como texto. Entonces verá "Título" en el mensaje de su notificación, no el contenido de la variable.

Después de ese bloque, podemos continuar. Al hacer clic en la notificación, la fibra procederá a través de Sí y pasará al bloque "Inicio de la aplicación". Aquí, puedes introducir el paquete de tu aplicación. Así, tan pronto como se haga clic en la notificación, se abrirá el reproductor de medios. ADEMÁS: La notificación ya muestra el título, el álbum y el artista de la pista que se está ejecutando. Ahora sólo tenemos que cancelar la notificación.

No podemos esperar a que el reproductor de medios publique una nueva notificación. Eso es importante. Debemos esperar hasta que la PISTA HAYA CAMBIADO.

Notification Cancel

En esta parte del script, la fibra entra en el bloque "¿Media Playing?". Este se pone en "Cuando se cambie" sin más argumentos de entrada (aparte del paquete de la aplicación). Sólo está ahí para esperar hasta que la pista haya sido cambiada o pausada. Tan pronto como eso ocurra, queremos eliminar nuestra notificación. Para eliminar una notificación mediante el bloque "Cancelar notificación", tenemos que especificar el ID de la notificación que queremos eliminar. En este momento no lo tenemos. PERO, el bloque "Notificación publicada" puede ayudarnos con eso. Usamos el bloque "Tiene Notificación", y comprobamos si el com.Android.automate ha publicado una notificación, y si es así, asignamos su ID a una variable. NOTA: ¡Cuidado con la notificación "Running..."! Si aún no la tienes desactivada, deberías hacerlo ahora. Automate podría devolver el ID de ESA notificación, que no es la que queremos eliminar.

Ahora, la fibra continúa en el bloque de Cancelación de la Notificación, en el que hay que introducir la variable ID. Tan pronto como se cancele la notificación, el bloque Mostrar Notificación continuará a través de la ruta NO. Este lleva de nuevo a "¿Mostrar On?" al principio.

NOTA: ¡No podemos esperar a que el reproductor de medios publique una notificación en lugar de cambiar la pista! Si esperamos a que el reproductor multimedia publique una nueva notificación, podríamos tener ESTE escenario:

Pantalla encendida - Automate publica la notificación - Pantalla apagada (la notificación de Automate persiste) - La pista del reproductor multimedia cambia (pero no envía una notificación, porque la pantalla está apagada) - Pantalla encendida - Automate sigue mostrando la notificación de la pista anterior (La notificación está desactualizada).

El "Cuando la pista cambia" eliminará la notificación de Automates. Cuando la pantalla esté encendida, el reproductor multimedia publicará una nueva notificación. Pero cuando la pantalla esté apagada, se borrará nuestra notificación actual y se creará una nueva en cuanto se vuelva a encender la pantalla.

Aquí está el guión completo con todas sus partes. NOTA: Tenga en cuenta estos bloques de bifurcación. No los he mencionado en la respuesta.

ENTIRE SCRIPT

He subido este script a la comunidad. Puedes encontrarlo AQUÍ . Ahora sólo hay que cambiar los valores de los bloques y los nombres de los paquetes de aplicaciones.

Espero que esto te ayude. Buena suerte.

EDIT: Este script no incluye las características de mi otra respuesta. Este script no se detiene automáticamente en cuanto se cierra el Media Player. Y hasta ahora, también es necesario iniciar este script manualmente. Sin embargo, ambas cosas podrían incluirse.

0 votos

Seguro que se me ha olvidado decir algo. Había algo que quería decirte. Tal vez no era muy importante. Si tienes alguna duda, pregunta :)

0voto

ULTRACOMFY Puntos 26

Por fin he encontrado la respuesta definitiva a tu pregunta. No creí que fuera tan sencillo. Estaba cegado por la idea de que pausar y reanudar la reproducción inmediatamente crearía una interrupción audible. Pero has dicho que no es así, así que aquí está:

Automate Script

Simplemente desactiva las notificaciones cuando la pantalla esté apagada, vuelve a activarlas cuando se vuelva a encender y fuerza la primera notificación. Hecho.

Una cosa en la que seguí pensando: ¿Qué pasaría si no hubiera reproducción? De cualquier manera, cada vez que enciendas la pantalla, este script reanudaría la reproducción. Incluso si sólo la pausas durante un minuto. Ese problema se resolvería fácilmente preguntando por la reproducción multimedia justo después del bloque "¿Pantalla encendida?". Si devolviera "No" al proceder por esa vía, sólo tendrías que volver al bloque "¿Pantalla Encendida?".

0 votos

Vaya, ULTRACOMFY, estás en racha :) te lo agradezco mucho. Espero poder probar todas las soluciones y comparar cual rinde mejor y sobre la duración de la batería. Esto tomará algún tiempo, sin embargo. Porque no tengo la oportunidad de escuchar música en el teléfono durante un tiempo prolongado, todos los días. Pero lo más importante es que al principio pensé que este tipo de manejo personalizado de las notificaciones ni siquiera es posible, y ahora usted proporcionó 3-4 enfoques diferentes. Lo cual es espectacular y realmente demuestra la flexibilidad de la aplicación.

0 votos

Me he dado cuenta de que este planteamiento es similar al tuyo en la respuesta. La única diferencia es, que usted tiene "Media Playing?" y si no, no hacer una pausa / reanudar plackback ya integrado en su flujo. Sin embargo, no necesitas el otro bloque "Media Playing?" cuando la pantalla está apagada. Este es el método que más energía ahorra. Puede ser un poco incómodo tener que iniciar manualmente este flujo. En mi otra respuesta te expliqué cómo instalar accesos directos en la pantalla de inicio, esto puede ser útil. ADEMÁS: Usando Automate, puedes desactivar un montón de funciones que consumen energía que de otra manera no podrías.

0 votos

Todavía no he decidido si quiero crear un acceso directo en la pantalla de inicio o un mosaico de configuración rápida para iniciar y detener el flujo. Por ahora, sólo mantener el flujo de mi respuesta siempre en ejecución. Veo una disminución en la duración de la batería, pero no es constante y no estoy seguro de que sea debido a Automate, a menos que Automate tenga algo que ver con el proceso com.google.Android.location.ALARM_WAKEUP_ACTIVITY_DETECTION.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X