kivy + android 意图过滤器

问题描述 投票:0回答:1

我对 kivy 和 python 很陌生,所以我可能已经陷入了困境,但我正在尝试弄清楚如何获取 android 意图并在简单的 kivy 应用程序中使用它?

所以我目前正在尝试找出基本的设计元素以及如何让东西发挥作用。我希望能够点击一个链接(例如)并启动我的应用程序,然后做一些事情,没什么太复杂的,它只需要能够获取从 android 传递给它的链接。

我发现这与 android 意图过滤器有关,并添加了适当的“intent_filters.xml”文件来完成这项工作。 因此,单击链接将启动我的应用程序,这很好。

但是我不知道如何解析传递给android中应用程序的信息。所以下面是一个非常简单的应用程序,带有一个按钮,我只想更新按钮以查看我的意图是否被接受。

当前单击按钮会导致应用程序关闭。当我在 Kivy VM 中测试这个时,我正在使用它来编译 apk,它将关闭并显示一条消息:“平台”未定义(这很有意义,因为它不在 android 中),但它对测试或跟踪如何进行帮助不大让它发挥作用。

我读过一些东西,似乎表明这对于 kivy 来说可能是不可能的? 任何人都可以确认这在 kivy 中是否可行,如果可以,如何实现? (我尝试过 Activity.getIntent()、intent.getData()、Intent.getIntent().getStringExtra(Intent.EXTRA_TEXT)、Intent().getData().getPath() 的变体,但均无济于事)

from kivy.app import App

from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout


class TutorialApp(App):

    def build(self):
        self.gen_btn = Button(text='Initial',
                         size_hint=(.90, .10),
                         pos=(5, 5),
                         font_size=50)
        self.gen_btn.bind(on_press=self.update_tutorialapp)
        l = BoxLayout()
        l.add_widget(self.gen_btn)
        return l

    def update_tutorialapp(self, *args):
        st = update_button()
        st.update_Message(self)

class update_button():

    def update_Message(self, source):
        source.gen_btn.text = "the event was called"
        if platform=="android":
            from jnius import cast
            from jnius import autoclass
            import android
            import android.activity

            # test for an intent passed to us
            PythonActivity = autoclass('org.renpy.android.PythonActivity')
            activity = PythonActivity.mActivity
            intent = activity.getIntent()
            intent_data = intent.getData()

            source.gen_btn.text = PythonActivity.getIntent().getStringExtra(Intent.EXTRA_TEXT)

if __name__ == "__main__":
    TutorialApp().run()
android python-2.7 kivy
1个回答
1
投票

使用这个你可以获得意图结果

def build(self):
    
    android.activity.bind(on_new_intent=self.on_new_intent) # add this line in build 

def on_new_intent(self, intent):

    data = intent.getData() # perform operations on intent
© www.soinside.com 2019 - 2024. All rights reserved.