إرسال وإستقبال الرسائل على الساعه

الإعلانات

إرسال وإستقبال الرسائل

 

 

إرسال وإستقبال الرسائل على الساعه

يمكنك إرسال رسائل بإستخدام واجهة برمجة التطبيقات لعميل الرساله MessageClient وإرفاق العناصر التالية مع الرسالة:

  • حمولة عشوائية (إختياري)
  • مسار يعرّف إجراء الرسالة بشكلٍ فريد

على عكس حالة عناصر البيانات، لا تحدث أي مزامنة بين تطبيقات الهاتف وتطبيقات الساعه.

الرسائل عبارة عن آلية إتصال أحادية الإتجاه، مناسبة لطلبات الإجراءات البعيدة (RPC)، مثل إرسال رسالة إلى الساعه لبدء نشاط ما.

يمكن توصيل عدة ساعات بهاتف المستخدم. يعتبر كل جهاز متصل في الشبكة بمثابة عقدة.  مع العديد من الأجهزة المتصلة..

يجب أن تأخذ في الإعتبار أي العقد سوف تتلقى الرسائل. مثال، في تطبيق النسخ الصوتي الذي يتلقى بيانات صوتية على الساعه..

يجب عليك إرسال الرسالة إلى عقدة، لديها قدرة على المعالجة، وبطارية ذات سعه، للتعامل مع الطلب، مثل الهاتف.

ملاحظة: إصدارات خدمات قوقل بلي الأقدم من 7.3.0 ، يمكن توصيل جهاز ساعة واحدة بالهاتف في المرة الواحدة.

قد تحتاج إلى تحديث الكود الموجود لديك لكي تأخذ في الإعتبار ميزة إتصال عدة عقد. إذا لم تقم بتنفيذ التغييرات، فقد لا يتم تسليم رسائلك إلى الأجهزة المقصودة.

 

اقرأ المصادر التالية:

نموذج طبقة البيانات

نموذج أذونات وقت التشغيل في تطبيقات الساعه

 

 

 

 

 

إرسال رسالة


يمكن أن يوفر تطبيق الساعه وظائف للمستخدمين مثل التسجيل الصوتي. يمكن للمستخدمين التحدث إلى الميكروفون الخاص بالساعه..

والحصول على تسجيل محفوظ في ملاحظة (أو سجل). لأن الساعة لا تتمتع عادة بقدرة المعالجة وسعة البطارية المطلوبتان..

للتعامل مع نشاط التسجيل الصوتي، يجب أن يقوم التطبيق بتفريغ هذا العمل إلى جهاز متصل أكثر قدرة على فعل هذا.

توضح لك الأقسام التالية كيفية الإعلان عن عقد الأجهزة التي يمكنها معالجة طلبات الأنشطة، وإكتشاف العقد القادرة على تلبية ماهو مطلوب، وإرسال الرسائل إلى تلك العقد.

 

 

 

 

إعلان القدرات

لبدء نشاط على الهاتف من خلال الساعه، إستخدم فئة “عميل الرساله” MessageClient لإرسال الطلب.

لأنه يمكن توصيل العديد من الساعات بالهاتف، يجب على تطبيق الساعه تحديد أن العقدة المتصلة قادرة على بدء النشاط.

في تطبيق الهاتف، أعلن أن العقدة التي يتم تشغيلها عليه، توفر إمكانات محددة.

للإعلان عن إمكانيات تطبيق الهاتف:

1- قم بإنشاء ملف تكوين XML في دليل /res/values الخاص بمشروعك وقم بتسميته wear.xml.

2- أضف مصدر بأسم android_wear_capabilities إلى ملف wear.xml.

3- قم بتحديد القدرات التي يوفرها الجهاز.

 

ملاحظة: القدرات عبارة عن سلاسل مخصصة والتي تقوم بتحديدها ويجب أن تكون فريدة بداخل تطبيقك.

 

يوضح المثال التالي كيفية إضافة إمكانية بأسم voice_transcription إلى ملف wear.xml:

<resources>
    <string-array name="android_wear_capabilities">
        <item>voice_transcription</item>
    </string-array>
</resources>

 

 

 

 

إستيراد العقد ذات القدرات المطلوبة

في البداية، يمكنك الكشف عن العقد ذات القدرات المطلوبة عن طريق إستدعاء دالة getCapability للفئة CapabilityClient.

يوضح المثال التالي كيفية إستيراد نتائج العقد، التي يمكن الوصول إليها يدوياً بإستخدام إمكانية voice_transcription:

KOTLIN

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)
}

JAVA

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);
}

 

 

لإكتشاف العقد ذات القدرات حالما تتصل بالساعه، قم بتسجيل مثيل للمستمع، على وجه التحديد OnCapabilityChangedListener لكائن CapabilityClient.

يوضح المثال التالي كيفية تسجيل المستمع وإستيراد نتائج العقد القابله للوصول إليها بإستخدام إمكانية voice_transcription:

KOTLIN

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

JAVA

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

 

 

بعد إكتشاف العقد ذات القدرات المطلوبة، حدد مكان إرسال الرسالة. يجب عليك إختيار عقدة قريبة من الساعه، لتقليل تنقل الرسائل عبر العقد المتعددة.

يتم تعريف العقدة القريبة على أنها متصلة مباشرة بالجهاز. لتحديد ما إذا كانت العقدة قريبة، قم بإستدعاء دالة ()Node.isNearby .

يوضح المثال التالي كيف يمكنك تحديد أفضل عقدة لإستخدامها:

KOTLIN

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
}

JAVA

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 لإرسال البيانات بين الأجهزة.

 

KOTLIN

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 { ... }
        }
    }
}

JAVA

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
    }
}

 

 

 

ملاحظة: لمعرفة المزيد حول الطلبات المتزامنه و الغير المتزامنه مع خدمات قوقل بلي ومتى تستخدم كل منها، راجع واجهة برمجة تطبيقات المهام Tasks API.

 

يمكنك أيضاً بث الرسائل إلى جميع العقد المتصله. لإستيراد كافة العقد المتصلة التي يمكنك إرسال رسائل إليها، قم بتنفيذ الكود التالي:

KOTLIN

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

JAVA

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. إذا كان هذا الشرط صحيحاً، فابدأ نشاطاً لمعالجة بيانات الصوت.

KOTLIN

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)
    }
}

JAVA

@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);
    }
}

 

 

هذا مجرد مقتطف يتطلب المزيد من التفاصيل للتنفيذ. تعرف على كيفية تنفيذ خدمة أو نشاط مستمع كاملة في الإستماع لأحداث طبقة البيانات.

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات