Android

3. O Cliente Jetpack Compose (:client)

O texto descreve como a aplicação cliente em Jetpack Compose se conecta a um serviço remoto usando AIDL, permitindo chamadas remotas quando o usuário interage com a interface do usuário. Desde a versão Android 11, é necessário declarar a visibilidade do pacote do servidor no manifesto do cliente para que ele seja descoberto corretamente.

Compartilhar
Medium

3. O Cliente Jetpack Compose (:client)

A aplicação cliente MainActivity.kt se conecta ao serviço remoto, converte o objeto IBinder retornado em uma interface de proxy AIDL usando IAIDLColorInterface.Stub.asInterface(), e dispara chamadas remotas quando o usuário interage com a interface do usuário.

class MainActivity : ComponentActivity() {

var iaidlColorInterface: IAIDLColorInterface? = null

// Manipula callbacks do ciclo de vida da conexão
private var connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
// Converte referência remota de IBinder para interface Proxy tipada
iaidlColorInterface = IAIDLColorInterface.Stub.asInterface(service)
Log.d("CLIENT_APP", "Conectado ao serviço AIDL remoto")
}

override fun onServiceDisconnected(name: ComponentName?) {
iaidlColorInterface = null
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// Conecta ao processo remoto do servidor usando a intenção explícita de pacote
val intent = Intent("AIDLColorService").apply {
setPackage("com.fierydinesh.binderipcserver")
}
bindService(intent, connection, BIND_AUTO_CREATE)

setContent {
SampleBinderIPCTheme {
val bgColor = remember { mutableIntStateOf(android.graphics.Color.GRAY) }

Scaffold(
containerColor = Color(bgColor.intValue),
modifier = Modifier
.fillMaxSize()
.clickable {
// Invoca método remoto além da barreira de processo!
iaidlColorInterface?.color?.let { newColor ->
bgColor.intValue = newColor
}
}
) { innerPadding ->
Greeting(name = "Android IPC", modifier = Modifier.padding(innerPadding))
}
}
}
}
}

Requisito Moderno do Android: Visibilidade de Pacote (Android 11+)

Desde o Android 11 (API nível 30), a filtragem de visibilidade do pacote é aplicada por padrão. Para permitir que o aplicativo cliente descubra o pacote do servidor, declaramos isso no AndroidManifest.xml do cliente:

<queries>
<package android:name="com.fierydinesh.binderipcserver" />
</queries>

Fonte original

Conteúdo traduzido e adaptado pela redação do Notícias Mobile. Confira também a matéria na fonte original.

Leia a matéria completa