Sobes.tech
Middle

Norādiet datu pārraides veidus starp divām lietojumprogrammām.

sobes.tech AI

Atbilde no AI

  1. Mērķi: Izmanto citu komponentu palaišanai un datu pārraidīšanai caur Intent.putExtra(). Atbalsta primīvus tipus, String, Parcelable un Serializable objektus:

    // Datu sūtīšana
    val intent = Intent("com.example.ANOTHER_APP_ACTION")
    intent.putExtra("key", "value")
    startActivity(intent)
    
    // Datu saņemšana citā lietotnē (Activity)
    val data = intent.getStringExtra("key")
    
  2. Content Providers: Nodrošina strukturētu piekļuvi koplietojamiem datiem (piemēram, kontaktu, mediju datiem). Programmas var pieprasīt, ievietot, atjaunināt un dzēst datus caur URI. Nepieciešama ContentProvider realizācija datu avota lietotnē:

    // Piemērs pieprasot datus no kontaktu (sistēmas ContentProvider)
    val cursor = contentResolver.query(
        ContactsContract.Contacts.CONTENT_URI,
        null,
        null,
        null,
        null
    )
    // ... kursora apstrāde
    cursor?.close()
    
  3. Binder (AIDL): Android interfeisa definīcijas valoda. Izmanto starpprocesu (IPC) mijiedarbībai starp divām lietotnēm. Ļauj definēt servisa interfeisu, kuru var izsaukt no citas procesa. Grūti īstenot, bet piemērots augstas slodzes scenārijiem vai divpusējai komunikācijai:

    // AIDL interfeisa piemērs (failā .aidl)
    package com.example.myapp;
    
    interface IRemoteService {
        String getData();
        void setData(String value);
    }
    
    // Binders, kas ģenerējas pēc AIDL un tiek izmantoti saziņai
    // Piemērs, izmantojot AIDL servisu
    private var remoteService: IRemoteService? = null
    private val connection = object : ServiceConnection {
        override fun onServiceConnected(className: ComponentName, service: IBinder) {
            remoteService = IRemoteService.Stub.asInterface(service)
            // Tagad var izsaukt remoteService metodes
        }
    
        override fun onServiceDisconnected(className: ComponentName) {
            remoteService = null
        }
    }
    
  4. Failu koplietošana: Caure koplietojamās mapes, kas pieejamas abām lietotnēm (piemēram, ārējā atmiņa) vai pagaidu piekļuves nodrošināšana caur FileProvider. Nepieciešamas lasīšanas/rakstīšanas atļaujas:

    // Piemērs pagaidu piekļuves nodrošināšanai caur `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: Programmas var sūtīt un saņemt plašsaziņas paziņojumus (Broadcasts). Dati tiek nodoti caur Intent Broadcast. Piemērots citu programmu brīdināšanai par notikumiem, nevis divpusējai datu pārraidīšanai:

    // Broadcast sūtīšana
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    intent.putExtra("data", "some_info")
    sendBroadcast(intent)
    
    // Broadcast saņemšana (BroadcastReceiver)
    class MyReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val data = intent.getStringExtra("data")
            // ...
        }
    }
    
  6. Sockets: Izmanto tīkla mijiedarbībai starp lietotnēm vienā ierīcē (localhost) vai tīklā. Prasa zemāka līmeņa tīkla protokolu īstenošanu:

  7. Koplietojamās preferences / datu bāzes (ierobežoti): Tehniski iespējams izmantot koplietojamu failu SharedPreferences vai SQLite datu bāzi, kas atrodas koplietojamā direktorijā. Tomēr tas nav uzticams un drošs veids, jo prasa stingru atļauju un sinhronizācijas pārvaldību, un var būt nedrošs. Parasti tas nav ieteicams datu pārraidē starp neatkarīgām programmām.