Python3+Kivy+Plyer推送通知图标问题

Python3+Kivy+Plyer Push notification icon problem

我在使用 android.

的简单通知测试应用程序时遇到了一个奇怪的错误

错误:

python  :  AttributeError: type object 'notification.org.notificator.R$drawable' has no attribute 'icon'

python 文件:

import kivy
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivy.lang import Builder
from plyer import notification
from kivy.uix.screenmanager import ScreenManager


class NotificationScreen(MDScreen):
    def do_notify(self, mode='fancy'):
        title = self.ids.notification_title.text
        message = self.ids.notification_text.text
        ticker = self.ids.ticker_text.text
        app_ico = 'Images/icon.png'

        notification.notify(app_icon=app_ico, title=title, message=message, ticker=ticker, timeout=10)
        #notification.notify(app_icon='Images/icon.ico', title=title, message=message, ticker=ticker, timeout=10)
        #notification.notify(title=title, message=message, ticker=ticker, timeout=10)


class ScreenManagement(ScreenManager):
    pass


view = Builder.load_file('main.kv')


class NotificationDemoApp(MDApp):
    def build(self):
        return view


if __name__ == '__main__':
    NotificationDemoApp().run()

KV文件:

ScreenManagement:
    id: scrm
    NotificationScreen:
        scrm: scrm

<NotificationScreen>:
    notification_title: notification_title
    notification_text: notification_text
    ticker_text: ticker_text
    MDBoxLayout:
        orientation: 'vertical'
        md_bg_color: 0, 0, 0, 1
        MDBoxLayout:
            orientation: 'horizontal'
            size_hint: 1, None
            md_bg_color: 1, 1, 1, 1
            TextInput:
                id: notification_title
                text: 'Put title here'
                size_hint: 1, None
            TextInput:
                id: notification_text
                text: 'Put message here'
                size_hint: 1, None
            TextInput:
                id: ticker_text
                text: 'New notification'
                size_hint: 1, None
        Button:
            text: 'Toast Notification'
            size_hint: 1, None
            on_release: root.do_notify(mode='toast')
        Button:
            text: 'Simple Notification'
            size_hint: 1, None
            on_release: root.do_notify(mode='normal')
        Button:
            text: 'Fancy Notification'
            size_hint: 1, None
            on_release: root.do_notify(mode='fancy')

buildozer基本未注释行:

[app]
title = Notification Example
package.name = notificator
package.domain = notification.org
source.dir = .
requirements = python3,kivy==2.0.0rc4,requests,kivymd,pillow,urllib3,charset_normalizer,idna,plyer
icon.filename = %(source.dir)s/icon.png

我已经尝试将图标更改为 .ico(图像目录中都有),但仍然是同样的问题。还尝试从 notify() 函数中删除 app_icon arg,但问题仍然存在。还尝试将图标放入根目录和同样的问题。

拜托,我一直在寻找答案,但没有在网上找到任何有用的信息。任何提示或解决方案?谢谢

我遇到了同样的问题并找到了问题和解决方法,但不是解决方案:

问题出在文件 plyer/platforms/android/notification.py 中创建的 Drawable Object 中。如果你 print(dir(Drawable)),你会发现没有属性 icon(如错误信息所述)。我不知道为什么缺少 icon 属性,但是您会发现有一个 presplash 属性(它也是一个 .png 文件,因此可以替换)。

通过将 notification.py 中的第 100 行从 app_icon = Drawable.icon 更改为 app_icon = Drawable.presplash,我可以避免错误并且我的应用程序运行良好。不过,您需要更改位于 ProjectName/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/projectname/plyer/platforms/android.

的正确文件中的行

在您的 buildozer.spec 文件中更改要求(如果构建是针对 android)。而不是设置:

requirements= plyer 

使用:

requirements= https://github.com/kivy/plyer/archive/refs/heads/master.zip

这应该可以解决问题:)