Indique as formas de transferência de dados entre duas aplicações.
sobes.tech IA
Resposta da IA
-
Intenções: São usadas para iniciar componentes de outro aplicativo e transferir dados através de
Intent.putExtra(). Suportam transferência de tipos primitivos, String, Parcelable e objetos Serializable.// Enviar dados val intent = Intent("com.example.ANOTHER_APP_ACTION") intent.putExtra("key", "value") startActivity(intent)// Receber dados em outro aplicativo (na Activity) val data = intent.getStringExtra("key") -
Provedores de Conteúdo: Fornecem acesso estruturado a dados compartilhados (por exemplo, contatos, mídia). Aplicações podem solicitar, inserir, atualizar e excluir dados via URI. Requer implementação de
ContentProviderna aplicação fonte de dados.// Exemplo de consulta de dados de contatos (ContentProvider do sistema) val cursor = contentResolver.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null ) // ... processamento do cursor cursor?.close() -
Binder (AIDL): Linguagem de definição de interfaces Android. Usada para interação entre processos (IPC) entre duas aplicações. Permite definir uma interface de serviço que pode ser chamada de outro processo. Complexo de implementar, adequado para cenários de alta carga ou comunicação bidirecional.
// Exemplo de interface AIDL (em arquivo .aidl) package com.example.myapp; interface IRemoteService { String getData(); void setData(String value); }// Binders gerados a partir de AIDL e usados para conexão. // Exemplo de cliente usando serviço AIDL private var remoteService: IRemoteService? = null private val connection = object : ServiceConnection { override fun onServiceConnected(className: ComponentName, service: IBinder) { remoteService = IRemoteService.Stub.asInterface(service) // Agora pode chamar métodos de remoteService } override fun onServiceDisconnected(className: ComponentName) { remoteService = null } } -
Partilha de Arquivos: Através de diretórios comuns acessíveis a ambas aplicações (por exemplo, armazenamento externo) ou fornecendo acesso temporário a arquivos via
FileProvider. Requer permissões de leitura/escrita.// Exemplo de fornecimento de acesso temporário via 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) -
Receptores de Broadcast: Aplicações podem enviar e receber mensagens broadcast. Dados são transmitidos via Intent no Broadcast. Adequado para notificar outras aplicações sobre eventos, não para transferência bidirecional de dados.
// Enviar Broadcast val intent = Intent("com.example.MY_CUSTOM_ACTION") intent.putExtra("data", "some_info") sendBroadcast(intent)// Receber Broadcast (em BroadcastReceiver) class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val data = intent.getStringExtra("data") // ... } } -
Sockets: Usados para interação de rede entre aplicações em um mesmo dispositivo (localhost) ou na rede. Requer implementação de protocolos de rede de baixo nível.
-
Preferências Compartilhadas / Bases de Dados (limitado): Tecnicamente, é possível usar um arquivo compartilhado de SharedPreferences ou uma base de dados SQLite localizada em um diretório acessível publicamente. No entanto, não é um método confiável e seguro, pois requer gerenciamento cuidadoso de permissões e sincronização, e pode ser inseguro. Geralmente, não recomendado para transferência de dados entre aplicações independentes.