需要帮助才能使用Pyjnius正确访问Android java类

时间:2015-06-08 21:28:44

标签: java python pyjnius

我很难尝试使用Pyjnius访问Android Java类" ContactsContract.Intents.Insert"。任何有关如何正确执行此操作的帮助表示赞赏

我一直在关注此处提供的示例:

Pyjnius:http://kivy.org/planet/2012/08/pyjnius-accessing-java-classes-from-python/

要访问的Java类:MediaRecorder

但我真正想要使用Pyjnius访问的是" ContactsContract.Intents.Insert"在Android中获取工作代码以添加新的联系人到我的Android手机。

Android类:https://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html

这是我到目前为止所得到的,但我对arraylist感到困惑:

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 个答案:

答案 0 :(得分: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