Kivy 使用预填充的联系人字段启动 android 意图
Posted
技术标签:
【中文标题】Kivy 使用预填充的联系人字段启动 android 意图【英文标题】:Kivy start android intent with pre-filled contact fields 【发布时间】:2015-11-06 10:25:13 【问题描述】:我想启动一个 android 添加联系人活动。但我也想启动联系人的意图插入操作。我的代码有什么问题。
我只是想使用已添加的电话和号码等预填充数据开始添加联系人活动。
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from jnius import cast
from jnius import autoclass
PythonActivity = autoclass('org.renpy.android.PythonActivity')
Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
Intents = autoclass("android.provider.ContactsContract$Intents")
ContactsContract = autoclass("android.provider.ContactsContract")
Contacts = autoclass("android.provider.ContactsContract$Contacts")
class Main(FloatLayout):
def go_site(self):
# create the intent
'''
intent = Intent()
intent.setAction(Intent.ACTION_INSERT)
intent.setData(Uri.parse("content://contacts/people/"))
#############################################################
intent = Intent()
intent.setAction(Intent.ACTION_INSERT_OR_EDIT)
intent.setType(Contacts.CONTENT_ITEM_TYPE)
'''
intent = Intent()
intent.setAction(Intents.Insert.ACTION)
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE)
#intent.putExtra(Intents.Insert.EMAIL, "")
# PythonActivity.mActivity is the instance of the current Activity
# BUT, startActivity is a method from the Activity class, not from our PythonActivity.
# We need to cast our class into an activity and use it
currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
currentActivity.startActivity(intent)
class MainApp(App):
def on_pause(self):
# Here you can save data if needed
return True
def on_resume(self):
# Here you can check if any data needs replacing (usually nothing)
pass
def build(self):
return Main()
if __name__ == '__main__':
MainApp().run()
【问题讨论】:
在 Zarah 的评论链接中找到答案:***.com/questions/1895206/… 【参考方案1】:Insert 是一个嵌套类。您需要使用 pyjnius 嵌套类语法。
这行得通:
Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
Intents = autoclass("android.provider.ContactsContract$Intents")
Insert = autoclass("android.provider.ContactsContract$Intents$Insert")
ContactsContract = autoclass("android.provider.ContactsContract")
Contacts = autoclass("android.provider.ContactsContract$Contacts")
class Main(FloatLayout):
def go_site(self):
intent = Intent()
intent.setAction(Intent.ACTION_INSERT_OR_EDIT)
intent.setType(Contacts.CONTENT_ITEM_TYPE)
intent.putExtra(Insert.NAME, "The Name")
intent.putExtra(Insert.PHONE, "The Phone")
intent.putExtra(Insert.COMPANY, "The Company")
currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
currentActivity.startActivity(intent)
【讨论】:
这在打开时有效,但字段仍然为空。以上是关于Kivy 使用预填充的联系人字段启动 android 意图的主要内容,如果未能解决你的问题,请参考以下文章