如何使用 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 应用程序?

如何在 python/kivy/pyjnius 检测 Android 中的屏幕分辨率?

pyjnius 通过包名获取其他应用程序的名称

pyjnius 通过包名获取其他应用程序的名称

在 Windows 上安装 pyjnius

导入我自己的 java 文件时找不到 Pyjnius 类