একটি সংযোগ শুরু করুন
কাছাকাছি ডিভাইস পাওয়া গেলে, আবিষ্কারক সংযোগ শুরু করতে পারে। নিম্নলিখিত উদাহরণটি আবিষ্কার হওয়ার সাথে সাথে একটি ডিভাইসের সাথে সংযোগের অনুরোধ করে।
private final EndpointDiscoveryCallback endpointDiscoveryCallback = new EndpointDiscoveryCallback() { @Override public void onEndpointFound(String endpointId, DiscoveredEndpointInfo info) { // An endpoint was found. We request a connection to it. Nearby.getConnectionsClient(context) .requestConnection(getLocalUserName(), endpointId, connectionLifecycleCallback) .addOnSuccessListener( (Void unused) -> { // We successfully requested a connection. Now both sides // must accept before the connection is established. }) .addOnFailureListener( (Exception e) -> { // Nearby Connections failed to request the connection. }); } @Override public void onEndpointLost(String endpointId) { // A previously discovered endpoint has gone away. } };
আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে, আপনি ব্যবহারকারীর কাছে আবিষ্কৃত ডিভাইসগুলির একটি তালিকা প্রদর্শন করতে চাইতে পারেন, যা তাদের সাথে সংযোগ করতে হবে তা চয়ন করতে দেয়।
একটি সংযোগ গ্রহণ বা প্রত্যাখ্যান
আবিষ্কারক একটি বিজ্ঞাপনদাতার সাথে সংযোগের অনুরোধ করার পরে, উভয় পক্ষকেই সংযোগ সূচনা প্রক্রিয়া সম্পর্কে ConnectionLifecycleCallback
কলব্যাকের onConnectionInitiated()
পদ্ধতির মাধ্যমে অবহিত করা হয়। মনে রাখবেন যে এই কলব্যাকটি বিজ্ঞাপনদাতার startAdvertising()
এবং আবিষ্কারক-এ requestConnection()
এ পাস করা হয়েছে, কিন্তু এখন থেকে এপিআই সিমেট্রিক।
এখন উভয় পক্ষকেই যথাক্রমে acceptConnection()
বা rejectConnection()
কলের মাধ্যমে সংযোগটি গ্রহণ বা প্রত্যাখ্যান করতে হবে তা বেছে নিতে হবে। সংযোগটি তখনই সম্পূর্ণরূপে প্রতিষ্ঠিত হয় যখন উভয় পক্ষই স্বীকার করে। যদি এক বা উভয় প্রত্যাখ্যান, সংযোগ বাতিল করা হয়. যেভাবেই হোক, ফলাফলটি onConnectionResult()
এ বিতরণ করা হয়।
নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে এই কলব্যাক বাস্তবায়ন করতে হয়:
private final ConnectionLifecycleCallback connectionLifecycleCallback = new ConnectionLifecycleCallback() { @Override public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) { // Automatically accept the connection on both sides. Nearby.getConnectionsClient(context).acceptConnection(endpointId, payloadCallback); } @Override public void onConnectionResult(String endpointId, ConnectionResolution result) { switch (result.getStatus().getStatusCode()) { case ConnectionsStatusCodes.STATUS_OK: // We're connected! Can now start sending and receiving data. break; case ConnectionsStatusCodes.STATUS_CONNECTION_REJECTED: // The connection was rejected by one or both sides. break; case ConnectionsStatusCodes.STATUS_ERROR: // The connection broke before it was able to be accepted. break; default: // Unknown status code } } @Override public void onDisconnected(String endpointId) { // We've been disconnected from this endpoint. No more data can be // sent or received. } };
আবার, এই উদাহরণটি দেখায় যে সংযোগটি উভয় পক্ষের দ্বারা স্বয়ংক্রিয়ভাবে গৃহীত হচ্ছে, কিন্তু আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে আপনি এই পছন্দটি কোনওভাবে ব্যবহারকারীর কাছে উপস্থাপন করতে চাইতে পারেন।
একটি সংযোগ প্রমাণীকরণ
যখন একটি সংযোগের অনুরোধ করা হয়, তখন আপনার অ্যাপ onConnectionInitiated()
এ প্রদত্ত প্রমাণীকরণ টোকেন ব্যবহার করে সংযোগটি প্রমাণীকরণ করতে পারে। এটি ব্যবহারকারীদের নিশ্চিত করার একটি উপায় প্রদান করে যে তারা অভিপ্রেত ডিভাইসের সাথে সংযোগ করছে৷ উভয় ডিভাইস একই টোকেন দেওয়া হয়, যা একটি ছোট র্যান্ডম স্ট্রিং; এটা কিভাবে যাচাই করবেন তা আপনার উপর নির্ভর করে। সাধারণত এতে উভয় ডিভাইসে টোকেন দেখানো এবং ব্যবহারকারীদের ব্লুটুথ পেয়ারিং ডায়ালগের মতো ম্যানুয়ালি তুলনা ও নিশ্চিত করতে বলা জড়িত।
এই নমুনা কোডটি একটি AlertDialog
ব্যবহারকারীর কাছে প্রমাণীকরণ টোকেন প্রদর্শন করে প্রমাণীকরণের একটি উপায় প্রদর্শন করে:
@Override public void onConnectionInitiated(String endpointId, ConnectionInfo info) { new AlertDialog.Builder(context) .setTitle("Accept connection to " + info.getEndpointName()) .setMessage("Confirm the code matches on both devices: " + info.getAuthenticationDigits()) .setPositiveButton( "Accept", (DialogInterface dialog, int which) -> // The user confirmed, so we can accept the connection. Nearby.getConnectionsClient(context) .acceptConnection(endpointId, payloadCallback)) .setNegativeButton( android.R.string.cancel, (DialogInterface dialog, int which) -> // The user canceled, so we should reject the connection. Nearby.getConnectionsClient(context).rejectConnection(endpointId)) .setIcon(android.R.drawable.ic_dialog_alert) .show(); }