Uygulama ayarlarını ve izinlerini programlı olarak nasıl açılır (Intent)

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

Belirli bir uygulamanın ayarlar ekranını veya "İzinler" bölümünü açmak için ACTION_APPLICATION_DETAILS_SETTINGS ve data = Uri.fromParts("package", packageName, null) içeren bir Intent kullanın. Bu çağrı, uygulama sayfası için API 9+ üzerinde çalışır ve API 23+ üzerindeki çalışma zamanı izinlerinin yönetimi için geçerlidir.

Hızlı cevap ve ne zaman uygulanır

Uygulama sayfasını (izinler dahil) şu şekilde açın:

  • data = Uri.fromParts("package", packageName, null) ile Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) kullanın.
  • Activity'den çağırın, servisden çağırıyorsanız FLAG_ACTIVITY_NEW_TASK ekleyin. Şu durumlarda uygulayın: "Bir daha sorma" seçeneğiyle izin reddedildiğinde, onboarding sırasında, kullanıcıya erişimi nasıl etkinleştireceğini açıklamanız gerektiğinde (kamera, mikrofon, kişiler vb.).

Pratik kod örnekleri (Kotlin ve Java)

Kotlin — uygulama sayfasını / izinleri açma:

import android.content.Intent
import android.net.Uri
import android.provider.Settings

fun openAppSettings(packageName: String, startActivityFunc: (Intent) -> Unit) {
    val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
        data = Uri.fromParts("package", packageName, null)
        flags = Intent.FLAG_ACTIVITY_NEW_TASK
    }
    startActivityFunc(intent)
}

Activity'de çağrı:

openAppSettings(packageName) { startActivity(it) }

Java — aynı örnek:

import android.content.Intent;
import android.net.Uri;
import android.provider.Settings;

private void openAppSettings(String packageName) {
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.setData(Uri.fromParts("package", packageName, null));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

Bildirim ayarlarını açma (Android 13+ channel id gönderimini destekler):

val notifIntent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, yourChannelId) // isteğe bağlı
}
startActivity(notifIntent)

Ayarlar için sık kullanılan Intent'ler (kullanışlı bir kopya kağıdı)

IntentNe açarMinimum API
Settings.ACTIONAPPLICATIONDETAILS_SETTINGSUygulama sayfası (izinler içinde)9
Settings.ACTIONAPPNOTIFICATION_SETTINGSUygulama için bildirim ayarları26
Settings.ACTIONREQUESTIGNOREBATTERYOPTIMIZATIONSPil optimizasyonundan muaf tutma23
Settings.ACTIONUSAGEACCESS_SETTINGSKullanım istatistiklerine erişim21
Settings.ACTIONMANAGEOVERLAY_PERMISSION (Intent URI aracılığıyla)"Diğer uygulamaların üzerinde göster" izni23

Intent'i Service veya BroadcastReceiver'dan çağırırken Intent.FLAG_ACTIVITY_NEW_TASK ekleyin; startActivity öncesinde resolveActivity() kontrolü yapın.

Hata işleme ve uyumluluk önerileri

  1. Intent'in cihazda izin verildiğini her zaman kontrol edin:
private fun safeStart(intent: Intent): Boolean {
    return if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent); true
    } else {
        // Kullanıcıya açıklama göster
        false
    }
}
  1. MIUI/EMUI/diğer özel ROM'lar bazı Intent'leri engelleyebilir — yedek plan hazırlayın: ayarları manuel olarak nasıl açacağınıza dair talimat içeren bir iletişim kutusu gösterin.
  2. QUERY_ALL_PACKAGES iznini gereksiz yere istemeyin — bu, Android 11+ için hassas bir izindir.
  3. Yeni platformlar için değişiklikleri takip edin: Google periyodik olarak belirli ayarlar için yeni ACTION_* eklemektedir.

Bazı üreticiler sistem ayarlarının davranışını değiştirebilir — Intent genel bir bölümü açabilir, belirli bir ekranı değil. Her zaman popüler arayüzlere sahip gerçek cihazlarda test edin.

Sık yapılan hatalar

  • FLAG_ACTIVITY_NEW_TASK olmadan Service'den Intent başlatmaya çalışmak → ActivityNotFoundException.
  • resolveActivity() kontrolünün eksik olması → özel ROM'da uygulama çöker.
  • Uri.fromParts içinde yanlış paket → genel ayarlar sayfası açılır.
  • Ayarlara geçtikten sonra uygulamanın otomatik olarak izin alacağını beklemek — kullanıcı izni manuel olarak etkinleştirmelidir.

SSS

  • Ayarları açmak için QUERY_ALL_PACKAGES izni istemek gerekir mi?
    • Hayır. Belirli bir uygulamanın ayarlarını açmak için QUERY_ALL_PACKAGES gerekmez.
  • Uygulama sayfası içindeki belirli "İzinler" ekranını nasıl açarım?
    • Çoğu cihazda ACTION_APPLICATION_DETAILS_SETTINGS doğrudan uygulama sayfasına gider, burada kullanıcı "İzinler"e geçebilir. Ayrıntı düzeyi sürüme ve arayüze bağlıdır.
  • Intent kullanarak bir izni otomatik olarak etkinleştirmek mümkün mü?
    • Hayır. Intent sadece ayarlar sayfasını açar — karar ve eylem kullanıcıya aittir.

Gerekirse Jetpack Compose, Navigation Component veya ayrıntılı hata işleme ile Service/Receiver'dan çağrı örnekleri ekleyebilirim.