Наведите начине преноса података између две апликације.
sobes.tech АИ
Одговор од АИ
-
Intents: Koriste se za pokretanje komponenti druge aplikacije i prenos podataka putem
Intent.putExtra(). Podržavaju prenos primitivnih tipova, String, Parcelable i Serializable objekata.// Slanje podataka val intent = Intent("com.example.ANOTHER_APP_ACTION") intent.putExtra("key", "value") startActivity(intent)// Dobijanje podataka u drugoj aplikaciji (u Activity) val data = intent.getStringExtra("key") -
Content Providers: Omogućavaju strukturirani pristup zajednički korišćenim podacima (npr. kontakti, mediji). Aplikacije mogu zahtevati, ubacivati, ažurirati i brisati podatke putem URI-ja. Potrebna je implementacija
ContentProvideru izvornom aplikaciji.// Primer zahteva za podatke iz kontakata (sistemski ContentProvider) val cursor = contentResolver.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null ) // ... obrada kursora cursor?.close() -
Binder (AIDL): Jezik definicije interfejsa Android. Koristi se za međuprocesnu komunikaciju (IPC) između dve aplikacije. Omogućava definisanje interfejsa servisa koji može biti pozvan iz drugog procesa. Složen za implementaciju, pogodan za visokopreopterećene scenarije ili dvosmernu komunikaciju.
// Primer AIDL interfejsa (u fajlu .aidl) package com.example.myapp; interface IRemoteService { String getData(); void setData(String value); }// Binders generišu na osnovu AIDL i koriste se za povezivanje. // Primer klijenta koji koristi AIDL servis private var remoteService: IRemoteService? = null private val connection = object : ServiceConnection { override fun onServiceConnected(className: ComponentName, service: IBinder) { remoteService = IRemoteService.Stub.asInterface(service) // Sada možete pozivati metode remoteService } override fun onServiceDisconnected(className: ComponentName) { remoteService = null } } -
Deljenje fajlova: Kroz zajedničke direktorijume dostupne za obe aplikacije (npr. eksterno skladište) ili pružanjem privremenog pristupa fajlovima putem
FileProvider. Potrebne su dozvole za čitanje/zapis.// Primer pružanja privremenog pristupa putem 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: Aplikacije mogu slati i primati široko rasprostranjene poruke (Broadcasts). Podaci se prenose putem Intent-a u okviru Broadcast-a. Pogodno za obaveštavanje drugih aplikacija o događajima, a ne za dvosmerni prenos podataka.
// Slanje Broadcast-a val intent = Intent("com.example.MY_CUSTOM_ACTION") intent.putExtra("data", "some_info") sendBroadcast(intent)// Primanje Broadcast-a (u BroadcastReceiver-u) class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val data = intent.getStringExtra("data") // ... } } -
Soketi: Koriste se za mrežnu komunikaciju između aplikacija na istom uređaju (localhost) ili putem mreže. Zahtevaju niži nivo implementacije mrežnih protokola.
-
Zajedničke Preferences / Baze podataka (ograničeno): Tehnički je moguće koristiti zajedničku datoteku SharedPreferences ili SQLite bazu podataka, smeštenu u javnom direktorijumu. Međutim, to nije pouzdan i siguran način, jer zahteva pažljivo upravljanje dozvolama i sinhronizacijom, i može biti nesigurno. Obično se ne preporučuje za prenos podataka između nezavisnih aplikacija.