Skip to content

Fector101/android_notify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

483 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


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
    • 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

Quick Start

from android_notify import Notification

# Simple notification
Notification(
    title="Hello",
    message="This is a basic notification."
).send()

Sample Image:
basic notification img sample

Installation

Kivy apps:

In your buildozer.spec file, ensure you include the following:

# Add requirements list
requirements = python3, kivy, 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
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 name paste android-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

Documentation

For Dev Version usage

requirements = python3, kivy, pyjnius, https://github.com/Fector101/android_notify/archive/main.zip
To use Custom Sounds

Option 1: Audio files bundled in res/raw

  • Put audio files in res/raw folder,
  • Then from buildozer.spec point to res folder android.add_resources = res
  • and includes it's format source.include_exts = wav.

Lastly From the code

# Create a custom notification channel with a unique sound resource for android 8+
Notification.createChannel(
    id="weird_sound_tester",
    name="Weird Sound Tester",
    description="A test channel for custom sounds from the res/raw folder.",
    res_sound_name="sneeze" # file name without .wav or .mp3
)

# Send a notification through the created channel
n=Notification(
    title="Custom Sound Notification",
    message="This tests playback of a custom sound (sneeze.wav) stored in res/raw.",
    channel_id="weird_sound_tester" # important tells notification to use right channel
)
n.setSound("sneeze")# for android 7 below 
n.send()

Option 2: Local file path or URI (sound_path)

You can use a local audio file, a content://, file://, or android.resource:// URI directly:

# Using a local file path
Notification.createChannel(
    id="local_sound",
    name="Local Sound",
    sound_path="/storage/emulated/0/Download/alert.mp3"
)

# Using a content URI (e.g., from media store)
Notification.createChannel(
    id="uri_sound",
    name="URI Sound",
    sound_path="content://media/external/audio/media/123"
)

# Send notification with custom sound path
n = Notification(
    title="Custom Sound",
    message="Playing from local path",
    channel_id="local_sound"
)
n.setSound(sound_path="/storage/emulated/0/Download/alert.mp3")
n.send()

Private files (e.g., in app's data/ directory) are automatically copied to external storage before playing.

Add Data to Notification
  • NotificationHandler.data_object returns a dict of data in the clicked notification
  • setData can also be called after send to change data_object stored
  • Use name if value is constant Notification(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")

For full documentation, examples, and advanced usage, API reference visit the documentation

☕ 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.

Buy Me A Coffee

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.