# Notifications Summarizer Agent (Android)
[](https://www.android.com)
[](https://kotlinlang.org)
The agent fetches device notifications, processes them using on-device LLMs, and generates summaries that can be retrieved by the host app.
It can operate in the background, at your scheduled timings and is designed to be privacy-centric by keeping all data on the device.
## Table of Contents
- [Quick Setup](#quick-setup)
- [Permissions](#permissions)
- [API Reference](#api-reference)
## Quick Setup
1. **Installation**
Add the agent dependency to your app's `build.gradle.kts` or `build.gradle` file:
```gradle
dependencies {
implementation("dev.deliteai.agents:notification_summarizer:x.x.x")
}
```
2. **Initialize NimbleNet Core (Crucial)**
It is **critical** to initialize the `NimbleNet` core library from your `Application` class. This must be done before any agent can be used.
In your `Application.kt`:
```kotlin
import dev.deliteai.NimbleNet
import dev.deliteai.datamodels.NimbleNetConfig
import android.app.Application
class YourApp : Application() {
override fun onCreate() {
super.onCreate()
val nimbleConfig = NimbleNetConfig(
// ... your configuration ...
)
NimbleNet.initialize(this, nimbleConfig)
}
}
```
3. **Add Permissions to Manifest**
Add the following permissions to your `AndroidManifest.xml`. These are required because they involve user interaction that the host application must initiate.
```xml
```
4. **Initialize the Agent**
After `NimbleNet` is initialized, you can initialize the `NotificationsSummarizerAgent`.
```kotlin
val config = NotificationSummarizerConfig(
onScheduledSummaryReady = { notificationSummary ->
// Handle the summary when the scheduled job completes
}
)
NotificationsSummarizerAgent.initialize(application, config)
```
5. **Get a Summary**
Request a summary of the current notifications.
```kotlin
val result = NotificationsSummarizerAgent.getSummaryOfCurrentNotification()
```
## Permissions
The SDK's manifest automatically merges most required permissions and components into your app. However, you are still required to declare and handle permissions that require explicit user interaction.
### Manifest Declarations
You must declare the following permissions in your `AndroidManifest.xml`:
- `POST_NOTIFICATIONS`: Allows the agent to post the final summary as a notification. (Runtime request needed on API 33+)
- `SCHEDULE_EXACT_ALARM`: Required to schedule the summarization jobs at precise times. (Runtime request may be needed on API 31+)
```xml
```
### Runtime Requests
Some permissions must be granted by the user while the app is running.
1. **Notification Access**: This special permission requires the user to manually enable it in system settings. You should direct the user to this screen.
```kotlin
val intent = Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS)
startActivity(intent)
```
2. **Post Notifications**: On Android 13 (API 33) and higher, you must request this permission to post notifications.
```kotlin
// Using ActivityResultContracts.RequestPermission()
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
```
3. **Exact Alarms**: On Android 12 (API 31) and higher, apps need this permission to schedule exact alarms. If it's not granted, you must redirect the user to system settings.
```kotlin
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (!alarmManager.canScheduleExactAlarms()) {
val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
startActivity(intent)
}
```
## API Reference
### NotificationsSummarizerAgent Methods
- `initialize(application, config)` - Initialize agent
- `scheduleNotificationSummaryJob(timeInMillis)` - Schedules a job to run at the specified time. When the job executes, it takes a snapshot of the current notifications, generates a summary, and stores it in the local Room database for later retrieval.
- `getSummaryOfCurrentNotification()` - Get current summary
- `getSummary(id)` - Get summary by ID
- `getSummary(date)` - Get summaries for date
- `getSummary(startDate, endDate)` - Get summaries in range
### NotificationSummary Data Class
```kotlin
data class NotificationSummary(
val id: String,
val date: LocalDate,
val body: String
)
```