Android'de Intent nasıl çalışır: action, activity ve map intent örneklerle

Kerem Aydın·7 Temmuz 2026·⏱3 dk

Intent, Android bileşenleri arasında eylemleri başlatmak için kullanılan bir nesnedir: açık (explicit) Intent'ler belirli bir Activity/Service'i hedef alır, kapalı (implicit) Intent'ler action (örneğin ACTION_VIEW) ve veriyi (URI) tanımlar; haritalar için ise geo: URI kullanılır; başlatma işlemi startActivity / startService aracılığıyla resolveActivity kontrolü veya yeni Activity Result API ile gerçekleştirilir.

Intent nedir ve türleri nelerdir

Intent, bileşenleri (Activity, Service, BroadcastReceiver) birbirine bağlar ve veri aktarır. Kısaca:

  • Açık (explicit) — uygulamadaki belirli bir bileşeni belirtir: uygulamanız içinde gezinme için kullanılır.
  • Kapalı (implicit) — bir eylemi (action) ve/veya veriyi belirtir; sistem diğer uygulamalarda uygun bir bileşen bulur.
  • Kullanım amacına göre: Activity (kullanıcı arayüzü), Service (arka plan görevleri), Broadcast (yayın mesajları).

Intent yapısı örneği:

  • action: Intent.ACTION_VIEW, Intent.ACTION_SEND vb.
  • data/uri: Uri.parse("https://...") veya "geo:lat,lon?q=place"
  • extras: putExtra ile anahtar/değer çiftleri

Action, Activity ve Map Intent — pratik örnekler

Açık Intent — aynı uygulamada bir Activity başlatma.

Kotlin:

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("userId", 42)
startActivity(intent)

Java:

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("userId", 42);
startActivity(intent);

Kapalı Intent — tarayıcıda bir bağlantı açma:

val uri = Uri.parse("https://example.com")
val intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(packageManager) != null) startActivity(intent)

Map Intent — haritalarda koordinatları açma veya yer arama:

// Etiketle birlikte koordinatları aç
val geoUri = Uri.parse("geo:34.99,-106.61?q=34.99,-106.61(Treasure)")
val mapIntent = Intent(Intent.ACTION_VIEW, geoUri)
mapIntent.setPackage("com.google.android.apps.maps") // isteğe bağlı — belirli bir uygulamayı çağır
if (mapIntent.resolveActivity(packageManager) != null) startActivity(mapIntent)

Veya kullanıcının uygulama seçmesine olanak tanımak için chooser kullanın:

val chooser = Intent.createChooser(mapIntent, "Şununla aç:")
startActivity(chooser)

Veri gönderme (ACTION_SEND):

val shareIntent = Intent(Intent.ACTION_SEND).apply {
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, "Gönderilecek metin")
}
startActivity(Intent.createChooser(shareIntent, "Paylaş"))

Service başlatma:

val svc = Intent(this, MyService::class.java)
startService(svc) // ön plan/arka plan servisleri için ContextCompat.startForegroundService kullanın, Android 8+ kısıtlamalarını dikkate alın

Bir Activity'den sonuç almanın modern yolu, eski startActivityForResult yerine Activity Result API kullanmaktır:

  • ActivityResultLauncher'ı onCreate içinde kaydedin ve launcher.launch(intent) çağrısını yapın.

Kapalı bir Intent'i çağırmadan önce resolveActivity(packageManager) kontrolü yapın veya uygun işleyici yoksa çökme (Crash) önlemek için try/catch kullanın.

Kodla intent başlatırken en iyi uygulamalar

  • Kapalı Intent'ler için her zaman resolveActivity(packageManager) kontrolü yapın.
  • Hassas veriler için açık Intent'ler ve erişim izinleri kullanın.
  • Kullanıcı deneyimini (UX) iyileştirmek için Intent.createChooser kullanın.
  • Belirli bir uygulamaya güvenmeyin — kritik değilse seçim imkanı bırakın.
  • Sonuç almak için Activity Result API (ActivityResultLauncher) kullanın.
  • AndroidManifest.xml dosyasında bildirimlerini ve gerekli izinleri belirtin.
  • Büyük nesneleri aktarmak için extras yerine yerel veritabanı/dosya/singleton kullanın.

Intent ile özel anahtarları veya büyük ikili verileri extras üzerinden göndermeyin — bu durum sızıntılara veya OOM (Out Of Memory) hatasına yol açabilir.

Sık yapılan hatalar

  • resolveActivity kontrolü olmadan kapalı Intent başlatma — uygun uygulama olmayan cihazlarda uygulama çöker.
  • putExtra ile büyük miktarda veri aktarma — OOM veya TransactionTooLargeException hatası.
  • Activity Result API yerine eski startActivityForResult ile sonuç beklemek.
  • geo: için yanlış URI belirtme — haritalar düzgün açılmaz.

SSS

  • Intent'in işleneceğini nasıl kontrol ederim?
    intent.resolveActivity(packageManager) != null kullanın veya startActivity'i try/catch içine alın.

  • Aktiviteleri AndroidManifest'e eklemem gerekir mi?
    Evet, tüm Activity ve Service'ler manifestte bildirilmelidir (test/dinamik olarak kaydedilen bileşenler hariç).

  • Google Maps'i tercih etmek için ne yapmalıyım?
    setPackage("com.google.android.apps.maps") ayarlayın, ancak uygulama yüklü değilse Intent işlenmeyecektir.

  • Başlatılan Activity'den sonucu nasıl alırım?
    ActivityResultLauncher kaydedin ve ActivityResultContracts.StartActivityForResult sözleşmesini kullanın.

  • Service veya BroadcastReceiver'dan Intent başlatabilir miyim?
    Evet, ancak yeni Android sürümlerinde arka plandan Activity başlatma kısıtlamaları vardır — bildirimler/ön plan servisi kullanın veya UI thread'inde intent başlatın.

Gerekirse projeniz için hazır kod parçacıkları (Kotlin/Java) veya Activity Result API örneği ekleyebilirim.