notify_listener 1.0.0
notify_listener: ^1.0.0 copied to clipboard
A Flutter plugin to listen to incoming Android notifications in real time.
notify_listener
Plugin de Flutter para escuchar notificaciones entrantes en Android en tiempo real. Permite capturar, analizar e interactuar con las notificaciones de otras aplicaciones desde segundo plano, ideal para automatización o sistemas de respuesta inteligente.
Homepage: icedigital.pe
Desarrollado por: iCe-Digital
Instalación #
dependencies:
notifier_listener: ^1.0.0
Configuración #
AndroidManifest.xml #
Agrega los permisos:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Registra el servicio dentro de <application>:
<service android:name="com.icedigital.notify_listener.NotificationsHandlerService"
android:label="Flutter Notifications Handler"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
android:exported="true"
android:foregroundServiceType="specialUse">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
<property
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="notification_listener" />
</service>
<!-- Para auto-inicio después del reinicio -->
<receiver android:name="com.icedigital.notify_listener.RebootBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Uso Básico #
// Inicializar
await NotificationsListener.initialize();
// Escuchar notificaciones
NotificationsListener.receivePort.listen((NotificationEvent event) {
print('Nueva notificación: ${event.packageName}');
print('Título: ${event.title}');
print('Texto: ${event.text}');
});
// Verificar permisos e iniciar servicio
void startListening() async {
var hasPermission = await NotificationsListener.hasPermission;
if (!hasPermission) {
NotificationsListener.openPermissionSettings();
return;
}
var isRunning = await NotificationsListener.isRunning;
if (!isRunning) {
await NotificationsListener.startService();
}
}
Uso Avanzado #
Manejador en segundo plano #
@pragma('vm:entry-point')
static void _callback(NotificationEvent evt) {
// Guardar en base de datos
// Enviar al hilo UI si es necesario
final SendPort? send = IsolateNameServer.lookupPortByName("_listener_");
send?.send(evt);
}
// Registrar al inicializar
NotificationsListener.initialize(callbackHandle: _callback);
Interactuar con notificaciones #
// Tocar notificación
if (event.canTap) event.tap();
// Marcar como leída
event.actions.forEach((action) {
if (action.semantic == 2) { // MARK_AS_READ
action.tap();
}
});
// Responder automáticamente
event.actions.forEach((action) {
if (action.semantic == 1) { // REPLY
Map<String, dynamic> inputs = {};
action.inputs.forEach((input) {
inputs[input.resultKey] = "Respuesta automática";
});
action.postInputs(inputs);
}
});
API Reference #
NotificationEvent #
uniqueId: ID único de la notificaciónpackageName: Paquete de la app que envió la notificacióntitle: Títulotext: Textotimestamp: Tiempo de publicaciónlargeIcon: Icono grande (Uint8List)canTap: Si puede ser tocadaactions: Lista de acciones disponibles
Action #
id: Índice de la accióntitle: Título de la acciónsemantic: Tipo semántico (0-10)tap(): Ejecutar la acciónpostInputs(): Enviar inputs (para respuestas)
NotificationsListener #
hasPermission: Verificar permisosisRunning: Estado del servicioinitialize(): Inicializar pluginstartService(): Iniciar serviciostopService(): Detener servicioopenPermissionSettings(): Abrir configuración de permisos