Android'de Intent ve intent:// URI Şemaları Nasıl Çalışır

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

Intent; Activity/Service/BroadcastReceiver başlatmak ve uygulamalar arasında veri aktarmak için kullanılan bir nesnedir; intent:// ise tarayıcı veya sistem tarafından Intent'e dönüştürülen ve uygulama yoksa web sitesine veya mağazaya yönlendiren özel bir URI şemasıdır.

Intent Nedir ve Neden Gereklidir

Intent, Android'de bir eylem talep etmenin evrensel yoludur: bir ekran açmak, bir servis başlatmak veya bir yayın göndermek. İki türü vardır:

  • Açık Intent: Belirli bir sınıfı belirtir (new Intent(this, MyActivity.class)) — dahili geçişler için kullanılır.
  • Kapalı Intent: action, data, category belirtir — sistem uygun uygulamayı seçer (örneğin URL için ACTION_VIEW veya paylaşım için ACTION_SEND).

Temel avantajları: bileşenler arasında gevşek bağlılık, sistem ve üçüncü taraf uygulamaların yeniden kullanılabilmesi, verilerin extras aracılığıyla aktarılması.

Intent'in Temel Alanları

AlanAçıklamaÖrnek
actionYapılması gereken eylemACTION_VIEW
dataİşlenecek URI veya verilerUri.parse("https://example.com")
typeVerilerin MIME tipi"image/jpeg"
extrasEk parametreler (anahtar-değer)intent.putExtra("id", 123)
categoryBağlam kategorileriBROWSABLE, DEFAULT
componentSınıfa açık bağlamanew ComponentName(pkg, cls)
flagsBaşlatma davranışı bayraklarıFLAGACTIVITYNEW_TASK

Basit bir çağrı örneği:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.7749,-122.4194"));
startActivity(intent);

URI Şemaları ve intent:// — Söz Dizimi ve Davranış

intent:// biçimindeki bağlantılar, Intent URI spesifikasyonudur. Tarayıcı dizgiyi ayrıştırır, Intent'i oluşturur ve manifest dosyasındaki intent-filter ile eşleşen uygulamayı açmaya çalışır. Genel yapı: intent://#Intent;scheme=;package=;S.browser_fallback_url=;end

Örnek (QR kod okuyucu için): intent://scan/#Intent;scheme=scanapp;package=com.example.scanner;S.browser_fallback_url=https://example.com/fallback;end

Tıklama sırasındaki davranış:

  1. Tarayıcı dizgiyi Intent'e dönüştürür.
  2. Sistem, uygun içeren uygulamayı arar (scheme/host/action ve DEFAULT ile BROWSABLE kategorilerine göre).
  3. Bulunursa — uygulamayı doğrudan açar (doğrulanmışsa seçim diyaloğu atlanabilir).
  4. Bulunamazsa — yedekleme (fallback) devreye girer: S.browser_fallback_url açılır veya paket belirtilmişse uygulama mağaza sayfasına yönlendirilir.

AndroidManifest.xml içinde örnek intent-filter:

<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="https" android:host="example.com" />
</intent-filter>

Tarayıcının uygulamayı diyalog penceresi olmadan açmasını istiyorsanız, dijital alan adı doğrulaması (app links / autoVerify) ve doğru intent-filter'lar kullanın.

Pratik Kurulum: intent-filter, Yedekleme ve Test Etme

  1. Manifest dosyasında intent-filter tanımlayın: VIEW eylemi, DEFAULT ve BROWSABLE kategorileri, gerekli scheme/host/path içeren data.
  2. Güvenli bir yedekleme ekleyin: intent-URI içinde S.browser_fallback_url parametresi veya sunucuda normal HTTPS bağlantısı döndürün.
  3. Activity içinde extras işlemini uygulayın: getIntent().getStringExtra("key").
  4. Test etme:
    • Cihazda/emülatörde tarayıcıdaki bağlantıya tıklayın.
    • ADB üzerinden: adb shell am start -a android.intent.action.VIEW -d "intent://details?id=123#Intent;scheme=example;package=com.example;end"
    • Uygulama yüklü olduğunda ve olmadığında (yedekleme) davranışı kontrol edin.

Yalnızca intent:// üzerine güvenmeyin: bazı kullanıcılar uygulamayı yüklemeyebilir. Her zaman düzgün bir web yedeklemesi sağlayın.

Sık Yapılan Hatalar

  • intent-filter içinde DEFAULT veya BROWSABLE kategorilerinin eksik olması — bağlantı göz ardı edilir.
  • scheme/host veya path yanlış belirtilmesi — uygulama eşleşmez.
  • extras için null kontrolü ve işleminin yapılmaması — veri okunurken çökmeler.
  • Yedeklemenin olmaması — kullanıcı boş bir tarayıcı sayfasında kalır.

SSS

  • intent:// içinde package belirtmek gerekir mi?
    Package belirtmek belirli bir uygulamanın çağrılmasını garanti eder ancak uyumluluğu azaltır; package olmadan sistem herhangi bir uygun işleyiciyi seçer.

  • intent:// üzerinden karmaşık nesneler aktarılabilir mi?
    URI üzerinden string parametreleri (S.=) aktarmak kolaydır. Karmaşık veriler için uygulama düzeyinde senkronizasyon veya uygulamanın sunucudan alacağı id içeren derin bağlantı kullanın.

  • Güvenlik nasıl sağlanır?
    Girdi parametrelerini kontrol edin, verileri doğrulayın, app links için alan adı doğrulaması kullanın ve dış kaynaklardan gelen verilere güvenmeyin.

Okuyun ve uygulayın: doğru yapılandırılmış Intent + yedeklemeli intent://, tarayıcıdan uygulamaya geçiş dönüşümünü artırır ve kullanıcı deneyimini öngörülebilir hale getirir.