Sau khi phát hiện một thiết bị từ xa, hàm handleIntent
đượ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 đề cập đến
bốn bước cần thiết để duy trì kết nối an toàn:
- Đang mở kết nối
- Chấp nhận kết nối
- Gửi và nhận dữ liệu
- Đóng kết nối
Mở một kết nối
Để mở kết nối nhằm nhận dữ liệu từ mộ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 bảo mật yêu cầu thiết bị nhận phải chấp nhận các kết nối mới trước khi nhận dữ liệu. Để chấp nhận kết nối từ xa, hãy sử dụng các hàm sau snippet:
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 } }); }