Sobes.tech
Middle

Numește modalitățile de transfer de date între două aplicații.

sobes.tech AI

Răspuns de la AI

  1. 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")
    
  2. 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()
    
  3. 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
        }
    }
    
  4. 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)
    
  5. 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")
            // ...
        }
    }
    
  6. 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.

  7. 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.