Uveďte spôsoby prenosu dát medzi dvoma aplikáciami.
sobes.tech AI
Odpoveď od AI
-
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") -
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
ContentProviderv 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() -
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 } } -
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) -
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") // ... } } -
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.
-
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.