2009-12-29 8 views
5

Ich möchte eine App starten, die der Benutzer in meiner Anwendung auswählt. Ich bin mir jedoch nicht sicher, wie ich das machen würde. Ich habe es versucht:Starten einer externen Anwendung über meine App

Intent intent = new Intent(); 
intent.setAction(Contacts.Intents.SHOW_OR_CREATE_CONTACT); 
startActivity(intent); 

Aber das scheint einen Fehler zu werfen und zwingen, meine Anwendung zu schließen. Ich habe auch versucht, hinzuzufügen:

<action android:name="Contacts.Intents.SHOW_OR_CREATE_CONTACT"/> 

in der AndroidManifest-Datei, aber ohne Erfolg.

Ein Blick auf Logcat zeigt, dass es eine "IOexception - keine solche Datei oder Verzeichnis" ist. Daraus ergeben sich einige Fragen. Ich habe die Android-Dokumente gelesen und festgestellt, dass die Contact.Intents-Klasse veraltet ist. Der Nachfolger ContactContracts zielt jedoch auf API Level 5 ab, während ich auf API Level 3 abziele. Könnte das das Problem sein? Außerdem habe ich diese Anwendung in den Code fest programmiert. Gibt es eine Möglichkeit, die Absichten einer Anwendung, die der Benutzer auswählt, abzurufen, damit sie gestartet werden können?

Antwort

7

Sie benötigen zusätzliche Informationen in der Absicht passieren Android sagen was Sie wollen zeigen, oder zu erstellen. Ansonsten weiß Android nicht, welche Aktivität gestartet werden soll und (vermutlich in Ihrem Fall) eine ActivityNotFoundException auslöst.

Für einen Kontakt verwenden Sie den generischen Intent.ACTION_INSERT_OR_EDIT und dann den MIME-Typ eines einzelnen Kontakts (Contacts.People.CONTENT_ITEM_TYPE).

Zum Beispiel:

Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
intent.setType(People.CONTENT_ITEM_TYPE); 
intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890"); 
intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.PhonesColumns.TYPE_MOBILE); 

Das wird die Kontakte App bringen und fordert Sie auf einen bestehenden Kontakt, um die Telefonnummer, hinzuzufügen oder einen neuen Kontakt zu erstellen.

Sie müssen Ihrem Manifest nichts Spezielles hinzufügen, um externe Aktivitäten zu starten. Nur wenn Sie die Kontakte ContentProvider direkt bearbeiten müssten, müssten Sie Ihrem Manifest die entsprechenden CONTACT-Berechtigungen hinzufügen.

+0

Danke, das hat funktioniert! Bedeutet dies, dass ich zusätzliche Parameter für jede Anwendung fest codieren muss? – keyboardP

+0

Nun, Sie müssen wissen, welche Absicht zu feuern, in diesem Sinne müssen Sie einige Werte fest codieren. Aber Sie kodieren keinen Anwendungsnamen oder etwas anderes, nur eine Absichtsaktion. Um ein Bild anzuzeigen (ohne sich darum zu kümmern, welche App damit zurechtkommt), könnten Sie Folgendes tun: 'neue Absicht (Intent.ACTION_VIEW, Uri.parse (" content: //foo/example/me.jpg "));' und solange es eine App gibt, die die Kombination aus generischer 'VIEW'-Aktion und einem JPEG-Dateityp verarbeiten kann, ist das alles, was Sie brauchen. –

+0

Ah, ich verstehe es jetzt. Das macht es viel einfacher, lol :). Danke für die Hilfe. – keyboardP

0

Sie müssen gültige Argumente an die Apps übergeben, die Sie starten. Viele Apps erwarten, dass der Daten-URI und/oder bestimmte Extras gültig sind.

0

Bitte versuchen Sie den folgenden Code:

Intent Absicht = new Intent (Contacts.Intents.SHOW_OR_CREATE_CONTACT);

this.startAktivität (Absicht);

(sorry, wenn es etwas falsch auf die Syntax ist, nicht ich android in diesem Computer haben)

Und die Aktion aus dem Manifest entfernen. das ist nicht nötig. Die Aktionsmethode wird für etwas anderes verwendet. Für mehr Informationen, schauen Sie bitte auf der android-Website: http://developer.android.com/reference/android/content/Intent.html

Daniel

+0

Die Zeichenfolge, die Sie im Konstruktor "Intent" übergeben, ist * die Aktion; das Original-Code-Snippet ist korrekt (wenn eine unnötige ausführliche Version von dem, was Sie geschrieben haben). –

1

Ich benutze diesen Code zu diesem Zweck:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.setClassName("com.android.settings", "com.android.settings.Settings"); 
startActivity(intent); 

Dies wird die App Einstellungen starten, können Sie diese auch verwenden:

intent.setClassName("com.android.music", "com.android.music.MediaPlaybackActivityStarter"); 
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity"); 
intent.setClassName("com.android.contacts", "com.android.contacts.DialtactsActivity"); 

Der erste startet die Standard-Musik-App, die zweite ist die Kontakte und der dritte der Dialer. Hoffe, das hilft.

+0

Beachten Sie, dass Sie folgende Dinge verwenden können: neue Absicht (android.provider.Settings.ACTION_SETTINGS) –

0

Die Aktivität, die Sie aufrufen, sollte nicht nur im Manifest für ihr eigenes Paket angezeigt werden, sondern auch im Manifest für das CALLING-Paket.

Verwandte Themen