我对 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()
使用这个你可以获得意图结果
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