我需要访问我的应用程序的当前活动。我查过这个官方代码了
如果我使用下面的代码作为文档说明:
PythonActivity = autoclass('org.renpy.android.PythonActivity')我无法访问活动,它会返回错误。所以在搜索之后我发现了这个:
PythonActivity = autoclass('org.kivy.android.PythonActivity')下面有两个函数。首先是打开one浏览器,就像在文档和IT WORKS中一样。
from jnius import cast
from jnius import autoclass
PythonActivity = autoclass('org.kivy.android.PythonActivity')
Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
intent = Intent()
intent.setAction(Intent.ACTION_VIEW)
intent.setData(Uri.parse('http://kivy.org'))
currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
currentActivity.startActivity(intent)现在我需要为我自己的脚本重新编写这个文件。我想给联系人添加新的联系人。我得到了“WRITE_CONTACTS”的许可。在buildozer.spec中:
android.permissions = WRITE_CONTACTS
但是我自己的脚本会返回错误。我的职能:
from jnius import autoclass,cast
PythonActivity=autoclass('org.kivy.android.PythonActivity')
Intent = autoclass('android.content.Intent')
JS=autoclass('java.lang.String')
intent=Intent()
intent.setAction(Intent.ACTION_INSERT)
intent.setType('ContactsContract.RawContacts.CONTENT_TYPE')
intent.putExtra('ContactsContract.Intents.Insert.NAME',JS('Example Name'))
intent.putExtra('ContactsContract.Intents.Insert.PHONE',JS('7777777777'))
currentActivity=cast('android.app.Activity',PythonActivity.mActivity)
currentActivity.startActivity(intent)日志:
jnius.jnius.JavaException: JVM异常发生:未发现处理意图{ typ=ContactsContract.RawContacts.CONTENT_TYPE (有附加物)} android.content.ActivityNotFoundException的活动
我不知道这是错误的外传,因为我的活动或我的错误类型选择。如果有人能帮我处理这件事我会很高兴的。像这样,媒体上的内容很少。所以我希望像这样的话题能让人们像我一样快速学习。
发布于 2022-06-02 01:07:29
最后,我找到了访问活动和获取联系人数据的解决方案。
正确访问PythonActivity
PythonActivity = autoclass("org.kivy.android.PythonActivity")访问Contacts Java类:
Contacts = autoclass("android.provider.ContactsContract$Contacts")访问ContactsContract.CommonDataKinds.Phone Java类(相同):
Kinds = autoclass("android.provider.ContactsContract$CommonDataKinds$Phone")创建getContentResolver()
cr = PythonActivity.mActivity.getContentResolver()现在我们需要创建2个查询。首先,我们将找到ID,并需要在第二个查询中使用它来找到相等的NUMBER.。还需要查一下是联系人有电话号码吗?也有。在此之后,我们可以循环第二个查询来查找数字:
name_number_dict= {} # Name:Number # Change as you wish..
while (que1.moveToNext()): #Query 1 Loop
if que1.getString(que1.getColumnIndex(Contacts.HAS_PHONE_NUMBER)): #If has number
que2 = cr.query(Kinds.CONTENT_URI, None, Kinds.CONTACT_ID + " = " + que1.getString(que1.getColumnIndex(CONTACTS_ID)), None, None) #Query 2 Loop
while (que2.moveToNext()):
name_number_dict[que1.getString(que1.getColumnIndex(Contacts.DISPLAY_NAME))] = que2.getString(que2.getColumnIndex(Kinds.NUMBER) # Get datas and put in dic.如果需要检查查询的所有ColumnNames,请使用query1.getColumnNames() >> 引证
我希望它能帮助你们那些需要在Python>Kivy应用程序中使用这个的人。
发布于 2022-04-07 11:52:48
我不知道Python语法,但我可以告诉您问题所在:
您错过了Intent操作。您需要将Intent中的操作设置为ContactsContract.Intents.Insert.ACTION (它具有字符串值"android.intent.action.INSERT")。
此外,看起来您正在发送Android 常量名称,而不是这些东西的实际字符串值,例如:
你这样做: intent.setType('ContactsContract.RawContacts.CONTENT_TYPE')
它将Intent中的Intent设置为字符串值"ContactsContract.RawContacts.CONTENT_TYPE",您在这里可以看到:
jnius.jnius.JavaException: JVM异常发生:未发现处理意图{ typ=ContactsContract.RawContacts.CONTENT_TYPE (有附加物)} android.content.ActivityNotFoundException的活动
但是type需要设置为Android常量ContactsContract.RawContacts.CONTENT_TYPE,它具有字符串值"vnd.android.cursor.dir/raw_contact"。
正如我所说的,我不知道Python语法,但您可能需要这样做:
intent=Intent()
intent.setAction(ContactsContract.Intents.Insert.ACTION)
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE)或者,如果Python支持它,Intent有一个将动作作为参数的构造函数,所以这也可以:
intent=Intent(ContactsContract.Intents.Insert.ACTION)
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE)告诉我这一切是否有意义。
https://stackoverflow.com/questions/71781057
复制相似问题