Numește modalitățile de transfer de date între două aplicații.
sobes.tech AI
Răspuns de la AI
-
Intenții: Sunt utilizate pentru a porni componente ale altor aplicații și pentru a transmite date prin
Intent.putExtra(). Suportă transmiterea de tipuri primitive, String, Parcelable și obiecte Serializable.// Trimiterea datelor val intent = Intent("com.example.ANOTHER_APP_ACTION") intent.putExtra("key", "value") startActivity(intent)// Obținerea datelor în altă aplicație (în Activity) val data = intent.getStringExtra("key") -
Content Providers: Oferă acces structurat la date partajate (de exemplu, contacte, media). Aplicațiile pot solicita, insera, actualiza și șterge date prin URI. Este necesară implementarea
ContentProviderîn aplicația sursă de date.// Exemplu de solicitare a datelor din contacte (ContentProvider sistemic) val cursor = contentResolver.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null ) // ... procesare cursor cursor?.close() -
Binder (AIDL): Language-ul de definire a interfeței Android. Este utilizat pentru interacțiunea între procese (IPC) între două aplicații. Permite definirea unei interfețe de serviciu care poate fi apelată din alt proces. Este complex de implementat, potrivit pentru scenarii cu trafic intens sau comunicare bidirecțională.
// Exemplu de interfață AIDL (în fișierul .aidl) package com.example.myapp; interface IRemoteService { String getData(); void setData(String value); }// Binders generate pe baza AIDL și sunt folosiți pentru legătură. // Exemplu de client care utilizează serviciul AIDL private var remoteService: IRemoteService? = null private val connection = object : ServiceConnection { override fun onServiceConnected(className: ComponentName, service: IBinder) { remoteService = IRemoteService.Stub.asInterface(service) // Acum se pot apela metodele remoteService } override fun onServiceDisconnected(className: ComponentName) { remoteService = null } } -
Partajare fișiere: Prin directoare comune, accesibile ambelor aplicații (de exemplu, stocarea externă) sau prin furnizarea temporară de acces la fișiere prin
FileProvider. Sunt necesare permisiuni de citire/scriere.// Exemplu de furnizare temporară a accesului prin 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) -
Receivere Broadcast: Aplicațiile pot trimite și primi mesaje broadcast. Datele sunt transmise prin Intent în cadrul Broadcast-ului. Potrivit pentru notificarea altor aplicații despre evenimente, nu pentru transfer bidirecțional de date.
// Trimiterea unui Broadcast val intent = Intent("com.example.MY_CUSTOM_ACTION") intent.putExtra("data", "some_info") sendBroadcast(intent)// Obținerea unui Broadcast (în BroadcastReceiver) class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val data = intent.getStringExtra("data") // ... } } -
Sokete: Sunt utilizate pentru interacțiunea de rețea între aplicații pe același dispozitiv (localhost) sau prin rețea. Necesită o implementare de nivel inferior a protocoalelor de rețea.
-
Preferințe partajate / Baze de date (limitativ): Teoretic, este posibil să se utilizeze un fișier comun SharedPreferences sau o bază de date SQLite, plasate într-un director accesibil publicului. Cu toate acestea, nu este o metodă sigură și fiabilă, deoarece necesită gestionarea atentă a permisiunilor și sincronizării, și poate fi nesigură. De obicei, nu se recomandă pentru transmiterea de date între aplicații independente.