Uveďte způsoby přenosu dat mezi dvěma aplikacemi.
sobes.tech AI
Odpověď od AI
-
Intenty: Používají se k spuštění komponent jiných aplikací a přenosu dat pomocí
Intent.putExtra(). Podporují přenos primitivních typů, String, Parcelable a Serializable objektů.// Odeslání dat val intent = Intent("com.example.ANOTHER_APP_ACTION") intent.putExtra("key", "value") startActivity(intent)// Získání dat v jiné aplikaci (v Activity) val data = intent.getStringExtra("key") -
Content Providers: Poskytují strukturovaný přístup ke sdíleným datům (například kontakty, média). Aplikace mohou požadovat, vkládat, aktualizovat a mazat data přes URI. Je nutná implementace
ContentProviderv zdrojové aplikaci.// Příklad dotazu na data z kontaktů (systémový ContentProvider) val cursor = contentResolver.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null ) // ... zpracování kurzoru cursor?.close() -
Binder (AIDL): Jazyk definice rozhraní Android. Používá se pro meziprocesovou komunikaci (IPC) mezi dvěma aplikacemi. Umožňuje definovat rozhraní služby, které může být voláno z jiného procesu. Je složitý na implementaci, vhodný pro vysokou zátěž nebo obousměrnou komunikaci.
// Příklad AIDL rozhraní (v souboru .aidl) package com.example.myapp; interface IRemoteService { String getData(); void setData(String value); }// Binders generované na základě AIDL a používané pro spojení. // Příklad klienta využívajícího 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) // Nyní lze volat metody remoteService } override fun onServiceDisconnected(className: ComponentName) { remoteService = null } } -
Sdílení souborů: Přes společné adresáře dostupné oběma aplikacím (například externí úložiště) nebo poskytnutím dočasného přístupu k souborům přes
FileProvider. Vyžadují se oprávnění ke čtení/zápisu.// Příklad poskytnutí dočasného přístupu přes 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: Aplikace mohou odesílat a přijímat vysílací zprávy (Broadcasts). Data jsou přenášena přes Intent v rámci Broadcast. Vhodné pro upozornění ostatních aplikací na události, nikoli pro obousměrný přenos dat.
// Odeslání Broadcast val intent = Intent("com.example.MY_CUSTOM_ACTION") intent.putExtra("data", "some_info") sendBroadcast(intent)// Přijímání Broadcast (v BroadcastReceiver) class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val data = intent.getStringExtra("data") // ... } } -
Sokety: Používají se pro síťovou komunikaci mezi aplikacemi na stejném zařízení (localhost) nebo přes síť. Vyžadují nižší úroveň implementace síťových protokolů.
-
Sdílené preference / Databáze (omezeně): Technicky je možné použít sdílený soubor SharedPreferences nebo databázi SQLite umístěnou ve veřejném adresáři. Není to však spolehlivý a bezpečný způsob, protože vyžaduje pečlivé řízení oprávnění a synchronizace, a může být nezabezpečený. Obvykle se nedoporučuje pro přenos dat mezi nezávislými aplikacemi.