0

I want to start an android add contacts activity.But i also want to start the contact's intents insert action. What is wrong with my code here.

Simply i want to start a add contacts activity with pre filled data like phone and number already added.

import kivy

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from jnius import cast
from jnius import autoclass
PythonActivity = autoclass('org.renpy.android.PythonActivity')
Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
Intents = autoclass("android.provider.ContactsContract$Intents")
ContactsContract = autoclass("android.provider.ContactsContract")
Contacts = autoclass("android.provider.ContactsContract$Contacts")

class Main(FloatLayout):
    def go_site(self):
        # create the intent
        '''
        intent = Intent()
        intent.setAction(Intent.ACTION_INSERT)
        intent.setData(Uri.parse("content://contacts/people/"))

        #############################################################

        intent = Intent()
        intent.setAction(Intent.ACTION_INSERT_OR_EDIT)
        intent.setType(Contacts.CONTENT_ITEM_TYPE)
        '''


        intent =  Intent()
        intent.setAction(Intents.Insert.ACTION)
        intent.setType(ContactsContract.RawContacts.CONTENT_TYPE)
        #intent.putExtra(Intents.Insert.EMAIL, "")



        # PythonActivity.mActivity is the instance of the current Activity
        # BUT, startActivity is a method from the Activity class, not from our PythonActivity.
        # We need to cast our class into an activity and use it

        currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
        currentActivity.startActivity(intent)



class MainApp(App):

    def on_pause(self):
        # Here you can save data if needed
        return True

    def on_resume(self):

        # Here you can check if any data needs replacing (usually nothing)
        pass
    def build(self):
        return Main()         
if __name__ == '__main__':
    MainApp().run()
Edwinner
  • 2,458
  • 1
  • 22
  • 33
  • 1
    Answer found on Zarah's comment at the link: http://stackoverflow.com/questions/1895206/how-can-i-launch-the-add-contact-activity-in-android – Edwinner Aug 15 '15 at 16:44

1 Answers1

0

Insert is an nested class. you need to use pyjnius nested class syntax.

this worked:

Intent = autoclass('android.content.Intent')
Uri = autoclass('android.net.Uri')
Intents = autoclass("android.provider.ContactsContract$Intents")
Insert = autoclass("android.provider.ContactsContract$Intents$Insert")
ContactsContract = autoclass("android.provider.ContactsContract")
Contacts = autoclass("android.provider.ContactsContract$Contacts")

class Main(FloatLayout):
    def go_site(self):
        intent = Intent()
        intent.setAction(Intent.ACTION_INSERT_OR_EDIT)
        intent.setType(Contacts.CONTENT_ITEM_TYPE)
        intent.putExtra(Insert.NAME, "The Name")
        intent.putExtra(Insert.PHONE, "The Phone")
        intent.putExtra(Insert.COMPANY, "The Company")

        currentActivity = cast('android.app.Activity', PythonActivity.mActivity)
        currentActivity.startActivity(intent)