Android kullanıcı modeli ve profil listesinin alınması

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

Android'de her kullanıcı, benzersiz bir UID'ye ve kendi verilerine sahip izole bir profildir. Profil listesi UserManager (userManager.userProfiles veya userManager.users) aracılığıyla alınabilir; tam liste için QUERY_ALL_USERS izni ve API sürüm kontrolü gerekebilir.

Kullanıcı modelinin yapısı (user model)

  • Android 4.2'den itibaren sistem birden fazla kullanıcıyı destekler: Owner (sahip, UID 0), primary, secondary, guest ve managed (İş Profili).
  • Her profil ayrı bir depolama alanına sahiptir: /data/user/. Ortak sistem verileri /data/system/users/ içinde saklanır.
  • Profil değiştirmek yeni kullanıcının durumunu yükler ve öncekini askıya alır (düşük güçlü cihazlarda 5–30 sn).
  • Managed profiller MDM tarafından yönetilir ve sıkı izolasyon ile ek politikalara sahiptir.

Kodda UserHandle ve UserManager yöntemlerini kullanın — profil UID'si sistem tarafından sabitlenir ve değişmez.

Profil ayarlarının yeri ve geçiş yapma

  • Ayarlar: Ayarlar → Sistem → Kullanıcılar ve profiller (farklı arayüzlerde menüler farklılık gösterebilir).
  • Yalnızca sahip tam listeyi görür ve profil ekleyebilir/silebilir; normal kullanıcılar kısıtlıdır.
  • Hızlı geçiş: Kilit ekranında avatara uzun basma veya bildirim çubuğundan avatar seçerek hızlı kaydırma.
  • Kurumsal profil: Ayarlar ayrı görüntülenir (İş profili / Hesaplar).

Android 15+ ile birlikte ek kısıtlamalar geldi: misafirlerin uygulama yüklemesi için PIN gerekebilir, sahipler profil bazlı kullanım istatistiklerini görebilir.

Kullanıcı listesini alma (getUsers) — adım adım

  1. API seviyesini kontrol edin: birçok yöntem API 21+ ile kararlıdır, ancak izinler ve davranışlar Android 11+ ile değişti.
  2. AndroidManifest'e izin ekleyin (platform kısıtlamalarını dikkate alın):
<uses-permission android:name="android.permission.QUERY_ALL_USERS" />
  1. Kodda (Kotlin):
val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
// Mevcut kullanıcının profilleri (hızlı):
val profiles: List<UserInfo> = userManager.userProfiles
// Tüm kullanıcılar (izin gerektirebilir ve kısıtlı olabilir):
val allUsers: List<UserInfo> = userManager.users

for (u in profiles) {
    Log.d("Users", "ID: ${u.id}, name: ${u.name}, flags: ${u.flags}")
}
val currentUserId = UserHandle.myUserId()
val isOwner = userManager.isUserOwner
  1. CLI (emülatör / ADB kurulu cihaz):
  • Kullanıcıları listeleme: adb shell pm list users
  • Kullanıcı ayarları ekranını açma: adb shell am start -a android.settings.USER_SETTINGS

Emülatörde AVD ve adb komutları aracılığıyla profil geçişini ve oluşturmayı test etmek daha kolaydır.

Sık yapılan hatalar

  • userManager.users'ın her zaman tüm kullanıcıları döndüreceği beklentisi — Android 11+ ile erişim kısıtlıdır; sistem/imzalı izin gerekebilir.
  • INTERACT_ACROSS_USERS olmadan başka bir profilin dosyalarına erişmeye çalışmak erişim hatalarına yol açar.
  • Profil silme işlemi yetkisiz uygulamadan yapılmaya çalışılır — yalnızca sahip/sistem işlemi removeUser(userId) yapabilir.

SSS

  • userProfiles okumak için izin gerekli mi?
    • userProfiles genellikle mevcut kullanıcı için uygulamaya açıktır; tam users listesi QUERY_ALL_USERS gerektirir ve kısıtlı olabilir.
  • Managed profile'ı normalinden nasıl ayırt ederim?
    • UserInfo bayraklarını kontrol edin: isManaged/isGuest/flags profil türünü gösterir.
  • Uygulamadan profil oluşturulabilir mi?
    • Kullanıcı oluşturma sistem ayrıcalıkları (CREATE_USERS) gerektirir ve genellikle normal uygulamalar için kullanılamaz.