Python Kivy/Pyjnius android NotificationListenerService

问题描述

我想用 python 中的 kivy 为 android 创建一个应用程序,它监听通知

我创建了一个 notification_listener.py:

from kivy import platform


if platform == "android":
    from jnius import autoclass,cast,PythonJavaClass,java_method
    from android.runnable import run_on_ui_thread


    PythonActivity = autoclass("org.kivy.android.PythonActivity")

    Activity = autoclass("android.app.Activity")
    Context = autoclass("android.content.Context")
    NotificationListenerService = autoclass("android.service.notification.NotificationListenerService")
    StatusBarNotification = autoclass("android.service.notification.StatusBarNotification")
    Log = autoclass("android.util.Log")
    Toast = autoclass("android.widget.Toast")

    String = autoclass("java.lang.string")
    CharSequence = autoclass("java.lang.CharSequence")

    activity = PythonActivity.mActivity
    currentActivity = cast(Activity,activity)
    context = cast(Context,currentActivity.getApplicationContext())


    class NotificationListener(PythonJavaClass):
        __javaclass__ = "android.service.notification.NotificationListenerService"
        __javacontext__ = "app"

        @java_method("()V")
        def onCreate(self):
            super(NotificationListener,self).onCreate()

            text = cast(CharSequence,String("Listener started..."))
            toast = Toast.makeText(context,text,Toast.LENGTH_LONG)
            toast.show()

        @java_method("(Landroid/service/notification/StatusBarNotification)V")
        def onNotificationPosted(self,sbn):
            notification = cast(StatusBarNotification,sbn)
            extras = notification.getNotification().extras

            tag = String("Notification recived")
            msg_title = String("title: %s" % (extras.getString("android.title")))
            msg_text = String("text: %s" % (extras.getString("android.text")))

            Log.v(tag,msg_title)
            Log.v(tag,msg_text)

            text = cast(CharSequence,String("Notification recieved..."))
            toast = Toast.makeText(context,Toast.LENGTH_LONG)
            toast.show()

但是我必须如何将其添加到 AndroidManifest.xml 中? 如果我用Java来做,下面的代码是正确的,但它是一个python文件,那么我该如何实现呢? ?

<service name=".NotificationListener"
    android:label="notification_listener"
    android:permissions="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)