Einleitung: Warum eine Activity aus einer anderen App aufrufen?
\n\nStell dir vor, du entwickelst eine Notiz-App und möchtest dem Nutzer die Möglichkeit geben, direkt aus deiner Oberfläche ein Foto zu machen. Oder dein Messenger soll Kontakte aus dem Adressbuch öffnen können. In beiden Fällen musst du eine Activity aus einer anderen App in Android starten.
\n\nDiese Aufgabe gehört zu den häufigsten Fragen auf Stack Overflow (tausende Aufrufe, hunderte Stimmen). Und das zu Recht: Wenn du es falsch machst, kann die App mit einem ActivityNotFoundException abstürzen oder – noch schlimmer – ein Sicherheitsrisiko darstellen. In diesem Tutorial zeigen wir dir alle Details in Kotlin, damit du externe Bildschirme sicher in deine Projekte integrieren kannst.
Übrigens: Du bist auf PythonLib, wo wir oft über Python sprechen – aber heute machen wir eine Ausnahme. Android-Entwicklung mit Kotlin ist eine mächtige Fähigkeit, die sich perfekt mit einem Python-Backend kombinieren lässt. Los geht's!
\n\nWas ist ein Intent und warum ist er der Schlüssel zur Lösung?
\n\nIn Android ist ein Intent eine Nachricht an das System: „Hey, ich möchte etwas mit dieser Aktion tun.“ Für das Starten einer Activity aus einer anderen App gibt es zwei Ansätze:
\n\n- \n
- Expliziter Intent – Du weißt genau, welche Komponente du starten willst (z. B.
com.example.target.MainActivity). Funktioniert nur, wenn du Zugriff auf den Code dieser App hast. \n - Impliziter Intent – Du beschreibst, was du tun möchtest (z. B. „Karte mit Koordinaten öffnen“), und das System findet selbst die passende App. Das ist der flexiblere und sicherere Weg für den Aufruf einer externen Activity. \n
Wir konzentrieren uns auf implizite Intents, da sie am häufigsten für die Android-Interprozesskommunikation verwendet werden.
\n\nBasisbeispiel: Karte mit Koordinaten öffnen
\n\nBeginnen wir mit einem einfachen Beispiel, das zeigt, wie man eine Activity aus einer anderen App startet, um eine Karte anzuzeigen.
\n\n// Kotlin\nval gmmIntentUri = Uri.parse("geo:55.7558,37.6173?z=15")\nval mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)\nmapIntent.setPackage("com.google.android.apps.maps")\n\n// Prüfen, ob es eine App gibt, die den Intent verarbeiten kann\nif (mapIntent.resolveActivity(packageManager) != null) {\n startActivity(mapIntent)\n} else {\n // Dem Nutzer eine Fehlermeldung anzeigen\n Toast.makeText(this, "Google Maps ist nicht installiert", Toast.LENGTH_SHORT).show()\n}\n\nWas passiert hier? Wir erstellen einen Intent mit der Aktion ACTION_VIEW und einer URI mit den Koordinaten. Mit setPackage geben wir explizit an, dass wir Google Maps verwenden möchten (optional – das System könnte auch eine Auswahl anbieten). Das Wichtigste ist die Prüfung mit resolveActivity. Sie verhindert einen Absturz, falls die benötigte App nicht auf dem Gerät installiert ist.
Szenario: Kamera aufrufen und Ergebnis erhalten
\n\nKommen wir zu einem komplexeren Fall – dem Starten einer Activity aus einer anderen App mit Rückgabewert. Ein klassisches Beispiel: Ein Foto machen und es in deiner App verwenden.
\n\n// Kotlin\nprivate const val REQUEST_IMAGE_CAPTURE = 1\n\nprivate fun dispatchTakePictureIntent() {\n val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)\n // Prüfen, ob die Kamera verfügbar ist\n if (takePictureIntent.resolveActivity(packageManager) != null) {\n startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)\n } else {\n // Fehlerbehandlung: Kamera nicht gefunden\n }\n}\n\noverride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n super.onActivityResult(requestCode, resultCode, data)\n if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {\n val imageBitmap = data?