Sobes.tech
Middle

İki uygulama arasında veri iletme yöntemlerini belirtiniz.

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. İstekler: Başka bir uygulamanın bileşenlerini başlatmak ve verileri Intent.putExtra() aracılığıyla iletmek için kullanılırlar. Primitif türler, String, Parcelable ve Serializable nesnelerin iletimini desteklerler.

    // Veri gönderme
    val intent = Intent("com.example.ANOTHER_APP_ACTION")
    intent.putExtra("key", "value")
    startActivity(intent)
    
    // Başka bir uygulamada (Activity'de) veri alma
    val data = intent.getStringExtra("key")
    
  2. İçerik Sağlayıcılar: Paylaşılan verilere yapılandırılmış erişim sağlarlar (örneğin, kişiler, medya). Uygulamalar URI aracılığıyla veri sorgulayabilir, ekleyebilir, güncelleyebilir ve silebilir. ContentProvider uygulamasının uygulanmasını gerektirir.

    // Kişi verilerinden sorgu örneği (sistem ContentProvider)
    val cursor = contentResolver.query(
        ContactsContract.Contacts.CONTENT_URI,
        null,
        null,
        null,
        null
    )
    // ... cursor işleme
    cursor?.close()
    
  3. Binder (AIDL): Android Arayüz Tanımlama Dili. İki uygulama arasında süreçler arası iletişim (IPC) için kullanılır. Bir hizmetin arayüzünü tanımlamaya izin verir, bu arayüz başka bir süreçten çağrılabilir. Uygulaması karmaşık, yüksek trafikli veya çift yönlü iletişim gereken durumlar için uygundur.

    // AIDL arayüzü örneği ( .aidl dosyasında)
    package com.example.myapp;
    
    interface IRemoteService {
        String getData();
        void setData(String value);
    }
    
    // AIDL tabanlı binderslar oluşturulur ve bağlantı için kullanılır.
    // AIDL servisini kullanan müşteri örneği
    private var remoteService: IRemoteService? = null
    private val connection = object : ServiceConnection {
        override fun onServiceConnected(className: ComponentName, service: IBinder) {
            remoteService = IRemoteService.Stub.asInterface(service)
            // Artık remoteService metodlarını çağırabilirsiniz
        }
    
        override fun onServiceDisconnected(className: ComponentName) {
            remoteService = null
        }
    }
    
  4. Dosya Paylaşımı: Ortak dizinler aracılığıyla veya FileProvider kullanarak geçici erişim sağlayarak yapılabilir. Okuma/yazma izinleri gereklidir.

    // FileProvider aracılığıyla geçici erişim örneği
    val fileUri = FileProvider.getUriForFile(context, "com.example.myapp.fileprovider", file)
    val intent = Intent(Intent.ACTION_VIEW)
    intent.setDataAndType(fileUri, "image/*")
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    startActivity(intent)
    
  5. Broadcast Alıcılar: Uygulamalar, yayınlanan mesajları (Broadcasts) gönderebilir ve alabilir. Veriler, Broadcast içindeki Intent aracılığıyla iletilir. Diğer uygulamalara olaylar hakkında bildirim göndermek için uygundur, iki taraflı veri iletimi için değil.

    // Broadcast gönderme
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    intent.putExtra("data", "some_info")
    sendBroadcast(intent)
    
    // Broadcast alma (BroadcastReceiver'da)
    class MyReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val data = intent.getStringExtra("data")
            // ...
        }
    }
    
  6. Soketler: Aynı cihazda (localhost) veya ağ üzerinden uygulamalar arasında ağ iletişimi için kullanılırlar. Daha düşük seviyeli ağ protokolü uygulaması gerektirir.

  7. Paylaşılan Tercihler / Veritabanları (sınırlı): Teknik olarak, ortak erişilebilir dizinde bulunan ortak bir SharedPreferences veya SQLite veritabanı dosyası kullanılabilir. Ancak, bu güvenilir ve güvenli bir yöntem değildir, izinlerin ve senkronizasyonun dikkatli yönetilmesini gerektirir ve güvensiz olabilir. Bağımsız uygulamalar arasında veri iletimi için genellikle önerilmez.