¿Cómo puedo activar / desactivar "Mostrar notificación" mediante programación en android
Tengo un requisito en el que necesito activar y desactivar la "Mostrar notificación" mediante programación de la información de la aplicación. Lo busqué por mucho tiempo, pero no pude conseguir la solución adecuada. ¿Es esto posible en android para activar / desactivar "Mostrar notificación" mediante programación ?. Gracias por adelantado.
- Actualización de la barra de progreso de la descarga en el área de notificación de AsynTask
- ¿Cómo puedo hacer una notificación en la barra de estado sin el mensaje expandido en la ventana "Notificaciones"? (sólo desea el icono)
- No se pudo resolver: com.google.android.gms: play-services-gcm: 7.5.
- Kivy - Plyer - Android - envío de notificaciones mientras la aplicación no se está ejecutando
- Notificación llevar la aplicación al frente sin actividad de cambio
- Uso de elementos personalizados en una Notificación de Android
- Plantilla de iconos de notificación para Android?
- Notificación regular no mostrará el botón Cerrar X en android
- Borrado de la notificación después de unos segundos
- Cómo restablecer notificationmanager número en notificación clara
- Navegar hasta la actividad de los padres desde la notificación
- Abra la aplicación después de hacer clic en Notificación
- Notificación de sonido, vibración y LED no funcionan
No podemos activar / desactivar programaticamente la notificación. Podemos comprobar el estado de la notificación con el siguiente fragmento
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); ApplicationInfo appInfo = context.getApplicationInfo(); String pkg = context.getApplicationContext().getPackageName(); int uid = appInfo.uid; Class appOpsClass; try { appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (int) opPostNotificationValue.get(Integer.class); return ((int) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); } catch (ClassNotFoundException | NoSuchMethodException | NoSuchFieldException | InvocationTargetException | IllegalAccessException ex) { Utils.logExceptionCrashLytics(ex); } // checked } else { // unchecked }
Tendría que mantener una bandera booleana y agregar un cheque antes de publicar una notificación desde su aplicación. Guarde ese indicador booleano en SharedPreferences. Una vez que el usuario o su aplicación inhabilite / active las notificaciones, haga que se reflejen en SharedPreferences.
Además, puede hacer una clase de utilidad para publicar notificaciones para que no tenga que agregar un cheque en muchos lugares diferentes.
public class NotificationUtil { public static void showNotification( Context context, int notificationId, int iconId, Class parentStackClass, String notificationTitle, String notificationText ) { boolean showNotification = PreferenceManager .getDefaultSharedPreferences(context) .getBoolean("SHOW_NOTIFICATION", true); if (!showNotification) return; android.support.v4.app.NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(iconId) .setContentTitle(notificationTitle) .setContentText(notificationText); Intent resultIntent = new Intent(context, parentStackClass); TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); stackBuilder.addParentStack(parentStackClass); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(notificationId, mBuilder.build()); } }
Puede guardarlo en SharedPreferences y cada vez que desee mostrar una notificación, puede comprobarlo.
- Cómo detener un servicio de Android desde un hilo
- Acceda a la base de datos en una clase que no sea de actividad