Sau khi phát hiện một thiết bị từ xa, hàm handleIntent
sẽ được gọi và đã đến lúc bắt đầu truyền dữ liệu giữa các ứng dụng. Phần này trình bày 4 bước thiết yếu để duy trì kết nối an toàn:
- Đang mở kết nối
- Đang chấp nhận kết nối
- Gửi và nhận dữ liệu
- Đóng kết nối
Mở kết nối
Để mở kết nối nhận dữ liệu từ thiết bị từ xa, hãy sử dụng đối tượng người tham gia đã nhận trước đó và chỉ định CHANNEL_NAME
:
Kotlin
participant .openConnection(CHANNEL_HELLO) .onFailure { /* handle failure */} .getOrNull() ?.let { connection -> connection.send("Hello, world".toByteArray(UTF_8)).onFailure { /* handle failure */} }
Java
public void openConnection(Participant participant) { Futures.addCallback( participant.openConnectionFuture(CHANNEL_HELLO), new FutureCallback<RemoteConnection>() { @Override public void onSuccess(RemoteConnection remoteConnection) { // use remoteConnection object to pass data, e.g.: sendDataToRemoteConnection(remoteConnection); } @Override public void onFailure(Throwable t) { // handle error opening a remote connection } }, mainExecutor); } private void sendDataToRemoteConnection(RemoteConnection remoteConnection) { Futures.addCallback( remoteConnection.sendFuture("Hello, world".getBytes()), new FutureCallback<Void>() { @Override public void onSuccess(Void result) { // data sent successfully } @Override public void onFailure(Throwable t) { // handle error } }, mainExecutor); }
Chấp nhận, gửi/nhận và đóng kết nối
Kết nối an toàn yêu cầu thiết bị nhận phải chấp nhận các kết nối đến trước khi nhận dữ liệu. Để chấp nhận kết nối từ xa, hãy sử dụng đoạn mã sau:
Kotlin
suspend fun acceptIncomingConnection(participant: Participant) { val connection = participant.acceptConnection(CHANNEL_HELLO).getOrThrow() connection.registerReceiver( object : ConnectionReceiver { override fun onMessageReceived(remoteConnection: RemoteConnection, payload: ByteArray) { displayMessage(payload.toString(UTF_8)) } override fun onConnectionClosed( remoteConnection: RemoteConnection, error: Throwable?, reason: String? ) { // handle connection closure } } ) }
Java
public void acceptIncomingConnection(Participant participant) { // Registers call back to accept incoming remote connection Futures.addCallback( participant.acceptConnectionFuture(CHANNEL_HELLO), new FutureCallback<>() { @Override public void onSuccess(RemoteConnection result) { receiveData(result); } @Override public void onFailure(Throwable t) { // handle connection error } }, mainExecutor); } private void receiveData(RemoteConnection remoteConnection) { remoteConnection.registerReceiver( new ConnectionReceiver() { @Override public void onMessageReceived(RemoteConnection remoteConnection, byte[] payload) { displayMessage(new String(payload, UTF_8)); } @Override public void onConnectionClosed( RemoteConnection remoteConnection, @Nullable Throwable error, @Nullable String reason) { // handle connection closure } }); }