FMUSER Wirless ينقل الفيديو والصوت بشكل أسهل!

[البريد الإلكتروني محمي] ال WhatsApp + 8618078869184
اللغة

    شرح مفصل للبث في Android

     

    ينقسم البث إلى نوعين مختلفين: "البث العادي" و "البث المرتب". البث العادي غير متزامن تمامًا ويمكن استقباله من قبل جميع أجهزة استقبال البث في نفس الوقت (منطقيًا). تعد كفاءة تسليم الرسالة عالية نسبيًا ، ولكن العيب هو أن المستقبل لا يمكنه تمرير نتيجة المعالجة إلى المستقبل التالي ، ولا يمكن إنهاؤه. انتشار نية البث ؛ ومع ذلك ، يعتمد البث المرتب على الأولوية التي أعلنها المتلقي (المُعلن عنها في android: السمة ذات الأولوية لعنصر intent-filter ، وكلما زاد الرقم ، زادت الأولوية ، ونطاق القيمة: -1000 إلى 1000. وهو أيضًا ممكن استدعاء setPriority () لكائن IntentFilter لتعيينه) ، ويستقبل المستلم البث بدوره. على سبيل المثال ، إذا كان مستوى A أعلى من مستوى B ، وكان المستوى B أعلى من C ، فسيتم نقل البث أولاً إلى A ، ثم إلى B ، وأخيراً إلى C. بعد حصول A على البث ، يمكن تخزين البيانات في البث. عندما يتم إرسال البث إلى B ، يمكن لـ B الحصول على البيانات المخزنة بواسطة A من البث.

     

    السياق. إرسال البث ()

       ما يتم إرساله هو بث عادي ، ولكل المشتركين فرصة الحصول عليه ومعالجته.

     

    Context.sendOrderedBroadcast ()

       الإرسال هو بث منظم. سيقوم النظام بتنفيذ أجهزة الاستقبال واحدًا تلو الآخر وفقًا للأولوية التي أعلنها جهاز الاستقبال. المتلقي السابق له الحق في إنهاء البث (BroadcastReceiver.abortBroadcast ()). إذا تم إنهاء البث من قبل المتلقي السابق ، فإن الأخير لم يعد بإمكان المتلقي الحصول على البث. بالنسبة للبث المرتب ، يمكن لجهاز الاستقبال السابق تخزين نتيجة المعالجة في نية البث ، ثم تمريرها إلى جهاز الاستقبال التالي.

     
    يتم استخدام مستقبل البث (BroadcastReceiver) لتلقي نية البث ، ويتم تحقيق إرسال نية البث من خلال استدعاء Context.sendBroadcast () و Context.sendOrderedBroadcast (). عادة ما يمكن استقبال نية البث من قبل العديد من أجهزة استقبال البث المشتركين في هذه النية. هذه الميزة مشابهة لمستقبلات رسائل الموضوع في JMS. لتنفيذ طريقة استقبال البث كما يلي:

     

    الخطوة الأولى: تحديد مستقبل البث ، ورث BroadcastReceiver ، وإعادة كتابة طريقة onReceive ().

    فئة عامة IncomingSMSReceiver يمتدBroadcastReceiver {
      Override public void onReceive (Contextcontext، Intentintent) {
      }
    }

     

    الخطوة 2: الاشتراك في نية البث ، هناك طريقتان للاشتراك:

    النوع الأول: استخدام الكود للاشتراك (اشتراك ديناميكي)

    مرشح IntentFilter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED") ؛
    جهاز استقبال IncomingSMSReceiver = newIncomingSMSReceiver () ،
    RegisterR Receiver (مستقبل ، مرشح) ؛

     

    النوع الثاني: الاشتراك في العقدة في ملف AndroidManifest.xml (اشتراك ثابت)


      
           
      


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

     

    يسمى بث الاشتراك الديناميكي أيضًا: البث غير المقيم. عند انتهاء التطبيق ، سيختفي البث بشكل طبيعي. على سبيل المثال ، أنت تشترك في البث في onCreate أو onResume في النشاط ، ويجب عليك إلغاء اشتراك البث في onDestory أو onPause. خلاف ذلك ، سيتم الإبلاغ عن استثناء ، لذلك سيكون جهاز استقبال البث الخاص بك غير مقيم.

     

    هناك تفاصيل أخرى هنا وهي طريقتا الاشتراك. عند إرسال عمليات البث ، يجب الانتباه إلى ما يلي: يتم استخدام طريقة النية الضمنية للتسجيل الديناميكي ، لذلك تحتاج إلى استخدام النية الضمنية للإرسال عند إرسال عمليات البث. ، وإلا فلن يتمكن جهاز استقبال البث من استقبال البث. انتبه لهذه النقطة. ولكن عند الاشتراك بشكل ثابت ، نظرًا لأنه مشترك في AndroidMainfest.xml ، فمن الممكن استخدام نية العرض والنية الضمنية عند إرسال البث (بالطبع هذا مخصص فقط لأجهزة استقبال البث التي حددناها نحن) ، لذلك فقط في حالة استخدامنا بشكل ضمني نية إرسال البث.

     

    لنلقي نظرة على مثال:

    ألق نظرة على هيكل المشروع:

     

    ألق نظرة على بث الاشتراك الثابت:
    حزمة com.broadcast.demo ؛

    استيراد android.app.Activity ؛
    استيراد android.content.Intent ؛
    استيراد android.os.Bundle ؛
    استيراد android.view.View ؛
    استيراد android.view.View.OnClickListener ؛
    استيراد android.widget.Button ؛

    استيراد com.example.androidbroadcastdemo.R ؛

    / **
     * بث اشتراك ثابت
     * @ المؤلف weijiang204321
     *
     */
    فئة عامة StaticRegisterBroadcastActivity يمتد النشاط {

    @تجاوز
    محمية باطلة عند الإنشاء (حزمة saveInstanceState) {
    super.onCreate (saveInstanceState) ؛
    setContentView (R.layout.activity_main) ؛
    زر btn = (Button) findViewById (R.id.btn) ؛
    إلى
    btn.setOnClickListener (جديد OnClickListener () {
    @تجاوز
    public void onClick (View v) {
    // استخدم طريقة ثابتة لتسجيل البث ، يمكنك استخدام نية العرض لإرسال البث
    بث النية = نية جديدة ("com.broadcast.set.broadcast") ؛
    sendBroadcast (البث ، فارغ) ؛
    }
    إلى
    })؛
    }
    إلى
    }


    الاشتراك في AndroidMainfest.xml:



    <البيان xmlns:android="
    http://schemas.android.com/apk/res/android"
        الحزمة = "com.example.androidbroadcastdemo"
        android: versionCode = "1"
        android: versionName = "1.0">

        <الاستخدامات-sdk
            android: minSdkVersion = "8"
            android: targetSdkVersion = "18" />
       
       
       
       
       
       

        <application
            android: allowBackup = "صحيح"
            android: icon = "@ drawable / ic_launcher"
            android: label = "@ string / app_name"
            android: theme = "@ style / AppTheme">
            <النشاط
                android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
                android: label = "@ string / app_name">
               
                   
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
           
           
               
                   
               
           
           
           
           
           
               
                   
               
           
           
       

    لا تقلق بشأن المحتوى الآخر في الوقت الحالي ، حيث سنتحدث عنه لاحقًا ، هنا نركز فقط على تسجيل البث الثابت


          
               
                   
               
           


    دعنا نلقي نظرة على جهاز استقبال البث:

    حزمة com.broadcast.receiver ؛

    استيراد android.content.BroadcastReceiver ؛
    استيراد android.content.Context ؛
    استيراد android.content.Intent ؛
    استيراد android.util.Log ؛

    / **
     * مستقبل البث
     * @ المؤلف weijiang204321
     *
     */
    فئة عامة UnSortBroadcastReceiver تمدد BroadcastReceiver {

    @تجاوز
    public void onReceive (سياق السياق ، القصد من النية) {
    Log.e ("Intent_Action:"، intent.getAction () + "") ؛
    }

    }
    المنطق في طريقة onReceive في مستقبل البث بسيط للغاية ، وهو طباعة محتوى الإجراء.
    شغّل البرنامج ، النتيجة بسيطة جدا ، هنا ليست الصورة.

     

    دعنا نلقي نظرة على الاشتراكات الديناميكية:


    حزمة com.broadcast.demo ؛

    استيراد android.app.Activity ؛
    استيراد android.content.Intent ؛
    استيراد android.content.IntentFilter ؛
    استيراد android.os.Bundle ؛
    استيراد android.view.View ؛
    استيراد android.view.View.OnClickListener ؛
    استيراد android.widget.Button ؛

    استيراد com.broadcast.receiver.UnSortBroadcastReceiver ؛
    استيراد com.example.androidbroadcastdemo.R ؛

    / **
     * استخدم طريقة ديناميكية لتسجيل البث
     * @ المؤلف weijiang204321
     *
     */
    DynamicRegisterBroadcastActivity للفئة العامة يوسع النشاط {
    إلى
    السلسلة النهائية العامة الثابتة NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM" ؛
    جهاز استقبال UnSortBroadcastR Receiver المحمي ؛
    إلى
    @تجاوز
    محمية باطلة عند الإنشاء (حزمة saveInstanceState) {
    super.onCreate (saveInstanceState) ؛
    setContentView (R.layout.activity_main) ؛
    زر btn0 = (زر) findViewById (R.id.btn) ؛
    btn0.setOnClickListener (جديد OnClickListener () {
    public void onClick (View v) {
    // إرسال البث
    Intent it = New Intent (NEW_LIFEFORM_DETECTED) ؛
    إرسال البث (ذلك) ؛
    }
    })؛
    }

    @تجاوز
    محمية باطلة onResume () {
    super.onResume () ؛
    // التسجيل للبث
    IntentFilter counterActionFilter = جديد IntentFilter (NEW_LIFEFORM_DETECTED) ،
    المتلقي = جديد UnSortBroadcastReceiver () ؛
    جهاز الاستقبال (المتلقي ، عامل التصفية المضاد) ؛
    }

    @تجاوز
    محمية باطلة onPause () {
    super.onPause () ؛
    // إلغاء البث
    unregisterReceiver (المتلقي) ؛
    }
    }
    نحن هنا نشترك في البث في onResume ، وإلغاء الاشتراك في البث في onPause.
    قم بتغيير النشاط الذي تم إطلاقه إلى DynamicRegisterBroadcastActivity في AndroidMainfest.xml. المحتوى الآخر لا يحتاج إلى تعديل. قم بتشغيل البرنامج وطباعة النتيجة بسيطة للغاية ، لذلك لن أرى الصورة هنا.

     

    دعونا نلقي نظرة على البث المنظم والبث غير المنظم

    لقد ذكرنا هذا بالفعل في البداية ، دعونا نلقي نظرة على البث المضطرب:

    أولاً نحدد جهازي استقبال للبث:

    جهاز استقبال البث الأول:


    حزمة com.broadcast.receiver ؛

    استيراد android.content.BroadcastReceiver ؛
    استيراد android.content.Context ؛
    استيراد android.content.Intent ؛
    استيراد android.util.Log ؛

    / **
     * مستقبل البث أ
     * @ المؤلف weijiang204321
     *
     */
    فئة عامة SortBroadcastReceiverA تمدد BroadcastReceiver {

    @تجاوز
    public void onReceive (سياق السياق ، القصد من النية) {
    Log.e ("عرض توضيحي:" ، "جهاز استقبال البث أ") ؛
    }

    }
    مستقبل البث الثاني:

    حزمة com.broadcast.receiver ؛

    استيراد android.content.BroadcastReceiver ؛
    استيراد android.content.Context ؛
    استيراد android.content.Intent ؛
    استيراد android.util.Log ؛

    / **
     * استقبال البث ب
     * @ المؤلف weijiang204321
     *
     */
    فئة عامة SortBroadcastReceiverB تمدد BroadcastReceiver {

    @تجاوز
    public void onReceive (سياق السياق ، القصد من النية) {
    Log.e ("Demo:" ، "Broadcast B") ؛
    }

    إلى
    إلى
    }


    اشترك في البث في AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    نتيجة العملية:


    نتيجة الجري غريبة بعض الشيء. لماذا يوجد جهاز الاستقبال B في الأمام والمستقبل A في الخلف؟ والسبب هو أنه عندما نشترك في البث في AndroidMainfest.xml ، فإننا نضبط قيمة السمة android: priority في مرشح intent. كلما زادت القيمة ، زادت الأولوية. ، أولوية جهاز الاستقبال B هي 1000 ، أولوية المستقبل A هي 999 ، لذلك يستقبل B البث أولاً ، ثم يستقبله A ، ولكن لا يوجد اتصال بين المستقبِل B والمستقبل A ، ولا يمكن أن يكون هناك تفاعل نعم ، نظرًا لأن هذا بث خارج الترتيب وغير متزامن ، يمكننا إجراء تجربة عن طريق إضافة رمز إلى طريقة onReceiver في B:

    abortBroadcast () ؛ // إنهاء إرسال هذا البث

    نتيجة العملية:

     

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

     

    دعونا نلقي نظرة على البث المنظم ، يجب تعديل الكود:

    الأول عند إرسال البث:


    بث النية = نية جديدة ("com.broadcast.set.broadcast") ؛
    sendOrderedBroadcast (بث ، فارغ) ؛
    ثم أضف طريقة لإنهاء البث في جهاز استقبال B:
    abortBroadcast () ؛

    الكود الآخر لا يحتاج إلى تعديل ، نتيجة العملية:

     

    لا يوجد سوى المستقبل B ، والمستقبل A لا يستقبل البث ، لأن البث منتهي في المستقبل B ، ولا يمكن للمستقبلات اللاحقة قبوله.

    قم بتعديل الكود أدناه:

    المستلم ب:


    حزمة com.broadcast.receiver ؛

    استيراد android.content.BroadcastReceiver ؛
    استيراد android.content.Context ؛
    استيراد android.content.Intent ؛
    استيراد android.os.Bundle ؛
    استيراد android.util.Log ؛

    / **
     * استقبال البث ب
     * @ المؤلف weijiang204321
     *
     */
    فئة عامة SortBroadcastReceiverB تمدد BroadcastReceiver {

    @تجاوز
    public void onReceive (سياق السياق ، القصد من النية) {
    Log.e ("Demo:" ، "جهاز استقبال البث B") ؛
    حزمة الحزمة = حزمة جديدة () ؛
    bundle.putString ("next_receiver" ، "مستقبل البث التالي") ؛
    setResultExtras (حزمة) ؛
    }
    إلى
    }
    بعد أن يستقبل B البث ، يخزن بعض القيمة ويمررها إلى جهاز الاستقبال التالي.


    كود المستقبل أ:


    حزمة com.broadcast.receive

     

     

     

     

    قائمة كل سؤال

    اسم اللقب

    البريد إلكتروني:

    الأسئلة المتكررة

    لدينا غيرها من المنتجات:

    مجموعة معدات محطة راديو FM المهنية

     



     

    حل IPTV الفندقي

     


      أدخل البريد الإلكتروني للحصول على مفاجأة

      fmuser.org

      es.fmuser.org
      it.fmuser.org
      fr.fmuser.org
      de.fmuser.org
      af.fmuser.org -> الأفريكانية
      sq.fmuser.org -> الألبانية
      ar.fmuser.org -> عربي
      hy.fmuser.org -> الأرمينية
      az.fmuser.org -> الأذربيجانية
      eu.fmuser.org -> الباسك
      be.fmuser.org -> البيلاروسية
      bg.fmuser.org -> البلغارية
      ca.fmuser.org -> الكتالانية
      zh-CN.fmuser.org -> الصينية (المبسطة)
      zh-TW.fmuser.org -> الصينية (التقليدية)
      hr.fmuser.org -> الكرواتية
      cs.fmuser.org -> التشيكية
      da.fmuser.org -> الدنماركية
      nl.fmuser.org -> الهولندية
      et.fmuser.org -> الإستونية
      tl.fmuser.org -> فلبيني
      fi.fmuser.org -> الفنلندية
      fr.fmuser.org -> الفرنسية
      gl.fmuser.org -> الجاليكية
      ka.fmuser.org -> الجورجية
      de.fmuser.org -> الألمانية
      el.fmuser.org -> اليونانية
      ht.fmuser.org -> الكريولية الهايتية
      iw.fmuser.org -> عبري
      hi.fmuser.org -> الهندية
      hu.fmuser.org -> الهنغارية
      is.fmuser.org -> الأيسلندية
      id.fmuser.org -> الإندونيسية
      ga.fmuser.org -> الأيرلندية
      it.fmuser.org -> الإيطالية
      ja.fmuser.org -> اليابانية
      ko.fmuser.org -> كوري
      lv.fmuser.org -> اللاتفية
      lt.fmuser.org -> ليتوانيا
      mk.fmuser.org -> المقدونية
      ms.fmuser.org -> الملايو
      mt.fmuser.org -> المالطية
      no.fmuser.org -> النرويجية
      fa.fmuser.org -> فارسي
      pl.fmuser.org -> البولندية
      pt.fmuser.org -> البرتغالية
      ro.fmuser.org -> الرومانية
      ru.fmuser.org -> الروسية
      sr.fmuser.org -> الصربية
      sk.fmuser.org -> السلوفاكية
      sl.fmuser.org -> السلوفينية
      es.fmuser.org -> الاسبانية
      sw.fmuser.org -> السواحيلية
      sv.fmuser.org -> السويدية
      th.fmuser.org -> التايلاندية
      tr.fmuser.org -> التركية
      uk.fmuser.org -> الأوكرانية
      ur.fmuser.org -> الأردية
      vi.fmuser.org -> الفيتنامية
      cy.fmuser.org -> الويلزية
      yi.fmuser.org -> اليديشية

       
  •  

    FMUSER Wirless ينقل الفيديو والصوت بشكل أسهل!

  • اتصل بنا

    العنوان
    No.305 غرفة HuiLan مبنى رقم 273 Huanpu Road قوانغتشو الصين 510620

    البريد الإلكتروني:
    [البريد الإلكتروني محمي]

    الهاتف / WhatApps:
    8618078869184

  • الفئات

  • بريدك الإلكتروني

    الاسم الأول أو الكامل

    البريد الإلكتروني

  • الحل باي بال  ويسترن يونيون بنك الصين
    البريد الإلكتروني:[البريد الإلكتروني محمي]   ال WhatsApp: +8618078869184 سكايب: sky198710021 دردش معي
    حقوق التأليف والنشر 2006-2020 بدعم من www.fmuser.org

    تواصل معنا