如何使用 Pyjnius 正确访问 Android java 类
Posted
技术标签:
【中文标题】如何使用 Pyjnius 正确访问 Android java 类【英文标题】:How to properly access an Android java class using Pyjnius 【发布时间】:2015-08-23 12:37:50 【问题描述】:我很难尝试使用 Pyjnius 访问 android Java 类“ContactsContract.Intents.Insert”。
我一直在关注这里提供的这个例子:
Pyjnius:http://kivy.org/planet/2012/08/pyjnius-accessing-java-classes-from-python/
要访问的 Java 类:MediaRecorder
但我真正想使用 Pyjnius 访问的是 Android 中的“ContactsContract.Intents.Insert”并获取工作代码以将新联系人添加到我的 Android 手机。
Android 类:https://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html
这是我目前所拥有的,但我对数组列表感到困惑:
from jnius import autoclass
Data = autoclass("ArrayList")
data = Data()
MyContacts = autoclass("ContactsContract.Intents.Insert")
mycontacts = MyContacts()
data.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE)
data.put(Organization.COMPANY, "Android")
data.add(mycontacts)
【问题讨论】:
【参考方案1】:Intents.Insert 是一个包含静态字符串常量的静态类。当我想从我正在构建的应用程序中添加联系人时,我遇到了同样的问题。我最终编写了一个包含静态方法的类,该方法将在 java 中添加一个联系人并将其添加到我的 buildozer.spec 文件中进行编译。我知道这并不完全是您所追求的,但是当遇到此类问题时,它可以让您有一个公平的想法,并且可以解决。将 Python 代码与 Java 混合起来实际上相当容易。 Kivy 非常适合制作 Android 应用程序原型,但与 pyjnius 一样,文档非常有限。
Java 代码
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
import android.app.Activity;
import android.content.Intent;
public class Contact
public static void addContact(Activity pyActivity, String name, String phone, String email)
Intent i = new Intent(Intent.ACTION_INSERT);
i.setType(Contacts.CONTENT_TYPE);
i.putExtra(Intents.Insert.NAME, name);
i.putExtra(Intents.Insert.PHONE, phone);
i.putExtra(Intents.Insert.EMAIL, email);
pyActivity.startActivity(i);
python 脚本
PythonActivity = autoclass("org.kivy.android.PythonActivity")
Contact = autoclass("Contact")
Contact.addContact(PythonActivity.mActivity, "Steve", "666", "steve666@gmail.com")
然后最后将 Conact.java 添加到 buildozer.spec 文件中
android.add_src = Contact.java
【讨论】:
你把java代码具体放在哪里了?我正在尝试做类似的事情。以上是关于如何使用 Pyjnius 正确访问 Android java 类的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 kivy、pyjnius 为 android 制作 GPS 应用程序?