পরিধানে বার্তা পাঠান এবং গ্রহণ করুন

আপনি MessageClient API ব্যবহার করে বার্তা পাঠান এবং বার্তার সাথে নিম্নলিখিত আইটেমগুলি সংযুক্ত করুন:

  • একটি ঐচ্ছিক নির্বিচারে পেলোড
  • একটি পাথ যা অনন্যভাবে বার্তাটির ক্রিয়া সনাক্ত করে৷

ডেটা আইটেমগুলির ক্ষেত্রে ভিন্ন, হ্যান্ডহেল্ড এবং পরিধানযোগ্য অ্যাপগুলির মধ্যে কোনও সিঙ্কিং ঘটে না। বার্তাগুলি হল একটি একমুখী যোগাযোগ ব্যবস্থা যা দূরবর্তী পদ্ধতি কলের (RPC) জন্য দরকারী, যেমন একটি কার্যকলাপ শুরু করার জন্য পরিধানযোগ্যকে একটি বার্তা পাঠানো।

একাধিক পরিধানযোগ্য ডিভাইস ব্যবহারকারীর হ্যান্ডহেল্ড ডিভাইসের সাথে সংযুক্ত করা যেতে পারে। নেটওয়ার্কের প্রতিটি সংযুক্ত ডিভাইস একটি নোড হিসাবে বিবেচিত হয়।

একাধিক সংযুক্ত ডিভাইসের সাথে, আপনাকে অবশ্যই বিবেচনা করতে হবে কোন নোডগুলি বার্তাগুলি গ্রহণ করে৷ উদাহরণস্বরূপ, একটি ভয়েস ট্রান্সক্রিপশন অ্যাপে যা পরিধানযোগ্য ডিভাইসে ভয়েস ডেটা গ্রহণ করে, অনুরোধটি পরিচালনা করার জন্য প্রক্রিয়াকরণ শক্তি এবং ব্যাটারি ক্ষমতা সহ একটি নোডে বার্তা পাঠান, যেমন একটি হ্যান্ডহেল্ড ডিভাইস৷

দ্রষ্টব্য: আপনি যখন আপনার বার্তার বিশদ বিবরণ নির্দিষ্ট করেন, তখন একাধিক সংযুক্ত নোডের সম্ভাবনা বিবেচনা করুন। নিশ্চিত করুন যে বার্তাটি উদ্দেশ্যযুক্ত ডিভাইস বা নোডগুলিতে বিতরণ করা হয়েছে।

ব্যবহারের উদাহরণগুলির জন্য নিম্নলিখিত নমুনা অ্যাপটি পড়ুন: DataLayer

একটি বার্তা পাঠান

একটি পরিধানযোগ্য অ্যাপ ব্যবহারকারীদের জন্য কার্যকারিতা প্রদান করতে পারে, যেমন ভয়েস ট্রান্সক্রিপশন। ব্যবহারকারীরা তাদের পরিধানযোগ্য ডিভাইসের মাইক্রোফোনে কথা বলতে পারে এবং একটি নোটে একটি প্রতিলিপি সংরক্ষণ করতে পারে। যেহেতু একটি পরিধানযোগ্য ডিভাইসে সাধারণত ভয়েস ট্রান্সক্রিপশন ক্রিয়াকলাপ পরিচালনা করার জন্য প্রয়োজনীয় প্রক্রিয়াকরণ শক্তি এবং ব্যাটারি ক্ষমতা থাকে না, তাই অ্যাপটিকে এই কাজটি আরও সক্ষম সংযুক্ত ডিভাইসে অফলোড করতে হবে।

নিম্নলিখিত বিভাগগুলি আপনাকে দেখায় যে কীভাবে ডিভাইস নোডগুলির বিজ্ঞাপন দিতে হয় যা কার্যকলাপের অনুরোধগুলি প্রক্রিয়া করতে পারে, অনুরোধ করা প্রয়োজন পূরণ করতে সক্ষম নোডগুলি আবিষ্কার করতে পারে এবং সেই নোডগুলিতে বার্তা পাঠাতে পারে৷

একটি পরিধানযোগ্য ডিভাইস থেকে একটি হ্যান্ডহেল্ড ডিভাইসে একটি কার্যকলাপ চালু করতে, অনুরোধ পাঠাতে MessageClient ক্লাস ব্যবহার করুন। যেহেতু একাধিক পরিধানযোগ্য জিনিস হ্যান্ডহেল্ড ডিভাইসের সাথে সংযুক্ত করা যেতে পারে, তাই পরিধানযোগ্য অ্যাপটিকে এটি নির্ধারণ করতে হবে যে একটি সংযুক্ত নোড কার্যকলাপটি চালু করতে সক্ষম। আপনার হ্যান্ডহেল্ড অ্যাপে, বিজ্ঞাপন দিন যে এটি যে নোডে চলে তা নির্দিষ্ট ক্ষমতা প্রদান করে।

আপনার হ্যান্ডহেল্ড অ্যাপের ক্ষমতার বিজ্ঞাপন দিতে, নিম্নলিখিতগুলি করুন:

  1. আপনার প্রকল্পের res/values/ ডিরেক্টরিতে একটি XML কনফিগারেশন ফাইল তৈরি করুন এবং এটির নাম দিন wear.xml
  2. wear.xmlandroid_wear_capabilities নামে একটি সংস্থান যোগ করুন।
  3. ডিভাইসটি যে ক্ষমতা প্রদান করে তা নির্ধারণ করুন।

দ্রষ্টব্য: ক্ষমতাগুলি হল কাস্টম স্ট্রিং যা আপনি সংজ্ঞায়িত করেন এবং আপনার অ্যাপের মধ্যে অনন্য হতে হবে৷

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে wear.xmlvoice_transcription নামের একটি ক্ষমতা যোগ করতে হয়:

<resources xmlns:tools="http://schemas.android.com/tools"
           tools:keep="@array/android_wear_capabilities">
    <string-array name="android_wear_capabilities">
        <item>voice_transcription</item>
    </string-array>
</resources>

প্রয়োজনীয় ক্ষমতা সহ নোড পুনরুদ্ধার করুন

প্রাথমিকভাবে, আপনি CapabilityClient ক্লাসের getCapability পদ্ধতিতে কল করে সক্ষম নোডগুলি সনাক্ত করতে পারেন। এই পদ্ধতিটি ব্যবহার করতে, আপনার Wear OS অ্যাপ এবং ফোন অ্যাপের একই অ্যাপ্লিকেশন আইডি থাকতে হবে। নিম্নলিখিত উদাহরণ দেখায় কিভাবে ম্যানুয়ালি voice_transcription ক্ষমতার সাথে পৌঁছানো নোডের ফলাফল পুনরুদ্ধার করা যায়:

কোটলিন

private const val VOICE_TRANSCRIPTION_CAPABILITY_NAME = "voice_transcription"
...
private fun setupVoiceTranscription() {
    val capabilityInfo: CapabilityInfo = Tasks.await(
            Wearable.getCapabilityClient(context)
                    .getCapability(
                            VOICE_TRANSCRIPTION_CAPABILITY_NAME,
                            CapabilityClient.FILTER_REACHABLE
                    )
    )
    // capabilityInfo has the reachable nodes with the transcription capability
    updateTranscriptionCapability(capabilityInfo)
}

জাভা

private static final String
    VOICE_TRANSCRIPTION_CAPABILITY_NAME = "voice_transcription";
    ...
private void setupVoiceTranscription() {
    CapabilityInfo capabilityInfo = Tasks.await(
        Wearable.getCapabilityClient(context).getCapability(
            VOICE_TRANSCRIPTION_CAPABILITY_NAME, CapabilityClient.FILTER_REACHABLE));
    // capabilityInfo has the reachable nodes with the transcription capability
    updateTranscriptionCapability(capabilityInfo);
}

পরিধানযোগ্য ডিভাইসের সাথে সংযুক্ত হওয়ার সাথে সাথে সক্ষম নোডগুলি সনাক্ত করতে, শ্রোতার একটি উদাহরণ নিবন্ধন করুন, বিশেষত একটি CapabilityClient অবজেক্টের একটি OnCapabilityChangedListener । নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে শ্রোতাকে নিবন্ধন করতে হয় এবং voice_transcription ক্ষমতা আছে এমন নোডের মাধ্যমে একটি ফলাফল পুনরুদ্ধার করতে হয়:

কোটলিন

private fun setupVoiceTranscription() {
    updateTranscriptionCapability(capabilityInfo).also { capabilityListener ->
        Wearable.getCapabilityClient(context).addListener(
                capabilityListener,
                VOICE_TRANSCRIPTION_CAPABILITY_NAME
        )
    }
}

জাভা

private void setupVoiceTranscription() {
    ...
    // This example uses a Java 8 Lambda. You can use named or anonymous classes.
    CapabilityClient.OnCapabilityChangedListener capabilityListener =
        capabilityInfo -> { updateTranscriptionCapability(capabilityInfo); };
    Wearable.getCapabilityClient(context).addListener(
        capabilityListener,
        VOICE_TRANSCRIPTION_CAPABILITY_NAME);
}

সক্ষম নোডগুলি সনাক্ত করার পরে, কোথায় বার্তা পাঠাতে হবে তা নির্ধারণ করুন। একাধিক নোডের মাধ্যমে বার্তা রাউটিং কমাতে আপনার পরিধানযোগ্য ডিভাইসের কাছাকাছি একটি নোড বেছে নিন। একটি কাছাকাছি নোডকে এমন একটি হিসাবে সংজ্ঞায়িত করা হয় যা সরাসরি ডিভাইসের সাথে সংযুক্ত। একটি নোড কাছাকাছি আছে কিনা তা নির্ধারণ করতে যেমন ব্লুটুথের মাধ্যমে সংযুক্ত, Node.isNearby() পদ্ধতিতে কল করুন। যদি একাধিক নোড কাছাকাছি থাকে, তবে ইচ্ছামত একটি বেছে নিন; একইভাবে, যদি কোন সক্ষম নোড কাছাকাছি না থাকে, তাহলে নির্বিচারে একটি সক্ষম নোড বেছে নিন।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে আপনি ব্যবহার করার জন্য সেরা নোড নির্ধারণ করতে পারেন:

কোটলিন

private var transcriptionNodeId: String? = null

private fun updateTranscriptionCapability(capabilityInfo: CapabilityInfo) {
    transcriptionNodeId = pickBestNodeId(capabilityInfo.nodes)
}

private fun pickBestNodeId(nodes: Set<Node>): String? {
    // Find a nearby node or pick one arbitrarily.
    return nodes.firstOrNull { it.isNearby }?.id ?: nodes.firstOrNull()?.id
}

জাভা

private String transcriptionNodeId = null;

private void updateTranscriptionCapability(CapabilityInfo capabilityInfo) {
    Set<Node> connectedNodes = capabilityInfo.getNodes();

    transcriptionNodeId = pickBestNodeId(connectedNodes);
}

private String pickBestNodeId(Set<Node> nodes) {
    String bestNodeId = null;
    // Find a nearby node or pick one arbitrarily.
    for (Node node : nodes) {
        if (node.isNearby()) {
            return node.getId();
         }
         bestNodeId = node.getId();
    }
    return bestNodeId;
}

বার্তা পৌঁছে দিন

একবার আপনি ব্যবহার করার জন্য একটি নোড সনাক্ত করার পরে, MessageClient ক্লাস ব্যবহার করে বার্তাটি পাঠান।

নিম্নলিখিত উদাহরণ দেখায় কিভাবে একটি পরিধানযোগ্য ডিভাইস থেকে ট্রান্সক্রিপশন-সক্ষম নোডে একটি বার্তা পাঠাতে হয়। এই কলটি সিঙ্ক্রোনাস এবং প্রসেসিং ব্লক করে যতক্ষণ না সিস্টেম ডেলিভারির জন্য বার্তাটি সারিবদ্ধ করে।

দ্রষ্টব্য: একটি সফল ফলাফল কোড বার্তা সরবরাহের গ্যারান্টি দেয় না। আপনার অ্যাপের ডেটা নির্ভরযোগ্যতার প্রয়োজন হলে, ডিভাইসের মধ্যে ডেটা পাঠাতে DataItem অবজেক্ট বা ChannelClient ক্লাস ব্যবহার করার কথা বিবেচনা করুন।

কোটলিন

const val VOICE_TRANSCRIPTION_MESSAGE_PATH = "/voice_transcription"
...
private fun requestTranscription(voiceData: ByteArray) {
    transcriptionNodeId?.also { nodeId ->
        val sendTask: Task<*> = Wearable.getMessageClient(context).sendMessage(
                nodeId,
                VOICE_TRANSCRIPTION_MESSAGE_PATH,
                voiceData
        ).apply {
            addOnSuccessListener { ... }
            addOnFailureListener { ... }
        }
    }
}

জাভা

public static final String VOICE_TRANSCRIPTION_MESSAGE_PATH = "/voice_transcription";
private void requestTranscription(byte[] voiceData) {
    if (transcriptionNodeId != null) {
        Task<Integer> sendTask =
            Wearable.getMessageClient(context).sendMessage(
              transcriptionNodeId, VOICE_TRANSCRIPTION_MESSAGE_PATH, voiceData);
         // You can add success and/or failure listeners,
         // Or you can call Tasks.await() and catch ExecutionException
         sendTask.addOnSuccessListener(...);
         sendTask.addOnFailureListener(...);
    } else {
        // Unable to retrieve node with transcription capability
    }
}

দ্রষ্টব্য: Google Play পরিষেবাগুলিতে অ্যাসিঙ্ক্রোনাস এবং সিঙ্ক্রোনাস কল সম্পর্কে আরও জানতে এবং প্রতিটি কখন ব্যবহার করতে হবে, Tasks API দেখুন।

আপনি সমস্ত সংযুক্ত নোডগুলিতে বার্তা সম্প্রচার করতে পারেন। সমস্ত সংযুক্ত নোডগুলি পুনরুদ্ধার করতে যা আপনি বার্তা পাঠাতে পারেন, নিম্নলিখিত কোডটি প্রয়োগ করুন:

কোটলিন

private fun getNodes(): Collection<String> {
    return Tasks.await(Wearable.getNodeClient(context).connectedNodes).map { it.id }
}

জাভা

private Collection<String> getNodes() {
    HashSet <String>results = new HashSet<String>();
    List<Node> nodes =
        Tasks.await(Wearable.getNodeClient(context).getConnectedNodes());
    for (Node node : nodes.getNodes()) {
        results.add(node.getId());
    }
    return results;
}

একটি বার্তা গ্রহণ করুন

প্রাপ্ত বার্তাগুলি সম্পর্কে অবহিত হতে, বার্তা ইভেন্টগুলির জন্য একজন শ্রোতা প্রদান করতে MessageClient.OnMessageReceivedListener ইন্টারফেস প্রয়োগ করুন৷ তারপর, addListener পদ্ধতিতে শ্রোতাকে নিবন্ধন করুন। নিচের উদাহরণটি দেখায় কিভাবে আপনি VOICE_TRANSCRIPTION_MESSAGE_PATH চেক করতে শ্রোতাকে প্রয়োগ করতে পারেন। যদি এই শর্তটি true হয়, ভয়েস ডেটা প্রক্রিয়া করার জন্য একটি কার্যকলাপ শুরু করুন৷

কোটলিন

fun onMessageReceived(messageEvent: MessageEvent) {
    if (messageEvent.path == VOICE_TRANSCRIPTION_MESSAGE_PATH) {
        val startIntent = Intent(this, MainActivity::class.java).apply {
            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            putExtra("VOICE_DATA", messageEvent.data)
        }
        startActivity(this, startIntent)
    }
}

জাভা

@Override
public void onMessageReceived(MessageEvent messageEvent) {
    if (messageEvent.getPath().equals(VOICE_TRANSCRIPTION_MESSAGE_PATH)) {
        Intent startIntent = new Intent(this, MainActivity.class);
        startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startIntent.putExtra("VOICE_DATA", messageEvent.getData());
        startActivity(this, startIntent);
    }
}

এই কোড আরো বাস্তবায়ন বিবরণ প্রয়োজন. ডেটা লেয়ার ইভেন্টের জন্য Listen- এ কীভাবে একটি পূর্ণ শ্রোতা পরিষেবা বা কার্যকলাপ বাস্তবায়ন করতে হয় সে সম্পর্কে জানুন।