Android-Notify
Android Notify is a Python library for effortlessly creating and managing Android notifications in Kivy and Flet apps.
Supports various styles and ensures seamless integration, customization and Pythonic APIs.
Features
-
Multiple Notification Styles: Support for various notification styles including:
- Simple text notifications
- Progress bar notifications (determinate and indeterminate)
- Large icon notifications
- Big picture notifications
- Combined image styles
- Custom notification Icon - images section
- Big text notifications
- Inbox-style notifications
- Colored texts and Icons
-
Rich Functionality:
- Add action Buttons with custom callbacks - Buttons section
- Update notification content dynamically
- Manage progress bars with fine-grained control
- Custom notification channels for Android 8.0+ (Creating and Deleting)
- Silent notifications
- Persistent notifications
- Click handlers and callbacks
- Cancel Notifications
- Use Custom Sound
- Vibration section
- Music notification guide
Quick Start
from android_notify import Notification
# Simple notification
Notification(
title="Hello",
message="This is a basic notification."
).send()
Sample Image:
Installation
Kivy apps:
In your buildozer.spec file, ensure you include the following:
# Add requirements list
requirements = python3, kivy, pyjnius, android-notify
# Add permission for notifications
android.permissions = POST_NOTIFICATIONS
Flet apps:
In your pyproject.toml file, ensure you include the following:
[tool.flet.android]
dependencies = [
"pyjnius", "android-notify"
]
[tool.flet.android.permission]
"android.permission.POST_NOTIFICATIONS" = true
- example of complete flet pyproject.toml
On Pydroid 3
On the pydroid 3 mobile app for running python code you can test some features.
- In pip section where you're asked to insert
Libary namepasteandroid-notify - Minimal working example
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from android_notify import Notification, NotificationHandler
class AndroidNotifyDemoApp(App):
def build(self):
layout = BoxLayout(orientation='vertical', spacing=10, padding=20)
layout.add_widget(Button(
text="Ask Notification Permission",
on_release=self.request_permission
))
layout.add_widget(Button(
text="Send Notification",
on_release=self.send_notification
))
return layout
def request_permission(self, *args):
NotificationHandler.asks_permission()
def send_notification(self, *args):
Notification(
title="Hello from Android Notify",
message="This is a basic notification."
).send()
if __name__ == "__main__":
AndroidNotifyDemoApp().run()
Desktop
For IDE IntelliSense Can be installed via pip install:
pip install android_notify
android-notify -v
For Agents
Full Api Reference: https://android-notify.vercel.app/api/android-notify-v1.61-api.mdCommon Methods
For full visit documentation for more examples and advanced usage.
For Images
Source can be local file paths or complete URLs execpt setSmallIcon which only accepts local png files.
setBigPicture- shows below when user clicks drop buttonsetLargeIcon- appears at right side of notification contentsetSmallIcon- changes app icon to a custompngsetColor- changes app icon backgroud Color
For online images URL should with https:// and you need internet permission android.permissions = INTERNET in buildozer.spec or pyproject.toml
from android_notify import Notification
notification = Notification(
title='Picture Alert!',
message='This notification uses setLargelcon and setBig Picture method.'
)
notification.setBigPicture("imgs/photo.png")
notification.setLargeIcon("imgs/profile.png")
notification.send()
Sample Image:
from android_notify import Notification
notification = Notification(
title='Custom Icon and Color',
message='This notification uses setColor and setSmallIcon.'
)
notification.setColor("red")
notification.setSmallIcon("love.png")
notification.send()
Sample Image:
For ProgressBar
updateProgressBar(current_value, message, title)- update progress in real-timeshowInfiniteProgressBar- shows an infinite progress animation.removeProgressBar(message, show_on_update=True, title)- Cleanly remove the progress bar.
from android_notify import Notification
from kivy.clock import Clock
progress = 0
notification = Notification(
title="Downloading...", message="0% downloaded",
progress_current_value=0, progress_max_value=100
)
notification.send()
def update_progress(dt):
global progress
progress = min(progress + 10, 100)
if progress==100:
notification.removeProgressBar(title="File Downloaded", message="super_large_file.zip")
elif progress >= 80:
notification.showInfiniteProgressBar()
else:
notification.updateProgressBar(progress, f"{progress}% downloaded")
return progress < 100 # Ends loop when reaching 100%
Clock.schedule_interval(update_progress, 3)
For texts
addLine- adds a line to the notification, useful for inbox stylesetSubText- sets a smaller text that appears at the side of app namesetBigText- sets a longer text that appears when the notification is expandedupdateTitle- updates the title text of the notificationupdateMessage- updates the main message text of the notification
from android_notify import Notification
notification = Notification(
title="5 New mails from Frank",
message="Check them out",
)
notification.setSubText("FabianCodes")
notification.setLargeIcon("imgs/profile.png")
notification.addLine("Re: Planning")
notification.addLine("Delivery on its way")
notification.addLine("Follow-up")
notification.send()
Documentation
For full documentation, examples, and advanced usage, API reference visit the documentation
For Dev Version usage
requirements = python3, kivy, pyjnius, https://github.com/Fector101/android_notify/archive/main.zip
Dev Features docs
Add Data to Notification
NotificationHandler.data_objectreturns adictof data in the clickednotificationsetDatacan also be called aftersendto changedata_objectstored- Use
nameif value is constantNotification(name="change page")
from android_notify import Notification, NotificationHandler
def build(self):
notification = Notification(title="Hello")
notification.setData({"next wallpaper path": "test.jpg"})
notification.send()
def on_start(self):
notification_data = NotificationHandler.data_object # {"next wallpaper path": "test.jpg",...}
print(notifcation_data)
def on_resume(self):
notification_data = NotificationHandler.data_object # {"next wallpaper path": "test.jpg",...}
print(notifcation_data)
How to control popups
from android_notify import Notification
import time
notification = Notification(
title="Processing...",
message="Starting task"
)
notification.send()
time.sleep(10)
# show heads-up when updated
notification.setOnlyAlertOnce(False)
notification.updateTitle("Processing Complete!")
notification.updateMessage("Task finished successfully")
☕ Support the Project
If you find this project helpful, consider buying me a coffee! 😊
Or Giving it a star on 🌟 GitHub Your support helps maintain and improve the project.
Bug Reports & Feature Requests
Found a bug or have an idea for a new feature?
Feel free to open an issue here
When reporting a bug, try to include:
- Device name
- Android version
- Steps to reproduce the issue
- Screenshots or logs (if possible)
Feature suggestions are also welcome.
Metadata
Release files for android-notify 1.61.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| android_notify-1.61.10.tar.gz | 100.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| android_notify-1.61.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 199.3 kB
Release files / android_notify-1.61.10.tar.gz
| Download URL | android_notify-1.61.10.tar.gz |
|---|---|
| Size | 100.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
785f59ca11c3b1f7400db4829605c2f793af41cf2bb410f4cff224995163bf01
|
|
BLAKE2b-256 checksum How to use checksums |
a0452abbb1a977c32c7bf26cea4ca576772449cbe113fc5f4984e9b0bdfad74e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency logRelease files / android_notify-1.61.10-py3-none-any.whl
| Download URL | android_notify-1.61.10-py3-none-any.whl |
|---|---|
| Size | 98.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c3ad3a484e483bfeaf0766558ea8c996863fc8a725b91f1846cbaa3695129852
|
|
BLAKE2b-256 checksum How to use checksums |
e98c897e8860eb79ce2296b56e3770015979ecfc3383022325f7139eed8a4934
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.
Transparency log