如何使用 Pyjnius 正确访问 Android java class
How to properly access an Android java class using Pyjnius
我很难尝试使用 Pyjnius 访问 Android Java class "ContactsContract.Intents.Insert".
我一直在关注此处提供的示例:
皮尼乌斯:http://kivy.org/planet/2012/08/pyjnius-accessing-java-classes-from-python/
Java class 访问:MediaRecorder
但我真正想使用 Pyjnius 访问的是 Android 中的 "ContactsContract.Intents.Insert" 并获取工作代码以将新联系人添加到我的 Android phone。
Android class: 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)
Intents.Insert 是一个静态的 class,其中包含静态字符串常量。当我想从我正在构建的应用程序中添加联系人时,我遇到了同样的问题。我最终编写了一个 class 包含一个静态方法,该方法将在 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
我很难尝试使用 Pyjnius 访问 Android Java class "ContactsContract.Intents.Insert".
我一直在关注此处提供的示例:
皮尼乌斯:http://kivy.org/planet/2012/08/pyjnius-accessing-java-classes-from-python/
Java class 访问:MediaRecorder
但我真正想使用 Pyjnius 访问的是 Android 中的 "ContactsContract.Intents.Insert" 并获取工作代码以将新联系人添加到我的 Android phone。
Android class: 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)
Intents.Insert 是一个静态的 class,其中包含静态字符串常量。当我想从我正在构建的应用程序中添加联系人时,我遇到了同样的问题。我最终编写了一个 class 包含一个静态方法,该方法将在 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