Sobes.tech
Middle

Uveďte spôsoby prenosu dát medzi dvoma aplikáciami.

sobes.tech AI

Odpoveď od AI

  1. Intenty: Používajú sa na spustenie komponentov inej aplikácie a prenos údajov pomocou Intent.putExtra(). Podporujú prenos primitívnych typov, String, Parcelable a Serializable objektov.

    // Odoslanie údajov
    val intent = Intent("com.example.ANOTHER_APP_ACTION")
    intent.putExtra("key", "value")
    startActivity(intent)
    
    // Získanie údajov v inej aplikácii (v Activity)
    val data = intent.getStringExtra("key")
    
  2. Content Providers: Poskytujú štruktúrovaný prístup k zdieľaným údajom (napríklad kontakty, médiá). Aplikácie môžu požadovať, vkladať, aktualizovať a odstraňovať údaje cez URI. Vyžaduje sa implementácia ContentProvider v zdrojovej aplikácii.

    // Príklad požiadavky na údaje z kontaktov (systémový ContentProvider)
    val cursor = contentResolver.query(
        ContactsContract.Contacts.CONTENT_URI,
        null,
        null,
        null,
        null
    )
    // ... spracovanie kurzora
    cursor?.close()
    
  3. Binder (AIDL): Jazyk definície rozhraní Android. Používa sa na medziprocesovú komunikáciu (IPC) medzi dvoma aplikáciami. Umožňuje definovať rozhranie služby, ktoré môže byť volané z iného procesu. Je zložitý na implementáciu, vhodný pre vysoké zaťaženie alebo obojsmernú komunikáciu.

    // Príklad AIDL rozhrania (v súbore .aidl)
    package com.example.myapp;
    
    interface IRemoteService {
        String getData();
        void setData(String value);
    }
    
    // Binders generované na základe AIDL a používané na spojenie.
    // Príklad klienta využívajúceho AIDL službu
    private var remoteService: IRemoteService? = null
    private val connection = object : ServiceConnection {
        override fun onServiceConnected(className: ComponentName, service: IBinder) {
            remoteService = IRemoteService.Stub.asInterface(service)
            // Teraz je možné volať metódy remoteService
        }
    
        override fun onServiceDisconnected(className: ComponentName) {
            remoteService = null
        }
    }
    
  4. Zdieľanie súborov: Prostredníctvom spoločných adresárov dostupných pre obe aplikácie (napríklad externé úložisko) alebo poskytnutím dočasného prístupu k súborom cez FileProvider. Vyžadujú sa oprávnenia na čítanie/zápis.

    // Príklad poskytnutia dočasného prístupu cez FileProvider
    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 Receivers: Aplikácie môžu odosielať a prijímať vysielacie správy (Broadcasts). Dáta sa prenášajú cez Intent v rámci Broadcast. Vhodné na upozornenie iných aplikácií na udalosti, nie na obojsmerný prenos dát.

    // Odoslanie Broadcast
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    intent.putExtra("data", "some_info")
    sendBroadcast(intent)
    
    // Prijímanie Broadcast (v BroadcastReceiver)
    class MyReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val data = intent.getStringExtra("data")
            // ...
        }
    }
    
  6. Sokety: Používajú sa na sieťovú komunikáciu medzi aplikáciami na jednom zariadení (localhost) alebo cez sieť. Vyžadujú nižšiu úroveň implementácie sieťových protokolov.

  7. Zdieľané Preferences / Databázy (obmedzene): Technicky je možné použiť spoločný súbor SharedPreferences alebo databázu SQLite, umiestnenú v verejnom adresári. Avšak, nie je to spoľahlivý a bezpečný spôsob, pretože vyžaduje dôsledné riadenie oprávnení a synchronizácie, a môže byť nebezpečný. Zvyčajne sa neodporúča na prenos údajov medzi nezávislými aplikáciami.