FMUSER бездротовий передавати відео та аудіо простіше!

[захищено електронною поштою] WhatsApp + 8618078869184
Language

    Детальне пояснення трансляції в Android

     

    Трансляція поділяється на два різні типи: "Звичайне мовлення" та "Замовлене мовлення". Звичайна трансляція є повністю асинхронною і може прийматись усіма приймачами трансляції одночасно (логічно). Ефективність доставки повідомлень порівняно висока, але недоліком є ​​те, що одержувач не може передати результат обробки наступному одержувачу, і він не може бути припинений. Розповсюдження наміру трансляції; однак упорядкована трансляція базується на пріоритеті, оголошеному приймачем (оголошено в android: атрибут приоритету елемента фільтра намірів, чим більше число, тим вищий пріоритет, діапазон значень: від 1000 до 1000. Це також можливо Виклик setPriority () об'єкта IntentFilter для встановлення), і одержувач отримує трансляцію по черзі. Наприклад, якщо рівень А вищий за рівень В, а рівень В вищий за С, тоді трансляція спочатку передається А, потім Б і, нарешті, С. Після того, як А отримує трансляцію, може зберігати дані в ефірі. Коли трансляція відправляється на B, B може отримувати дані, що зберігаються A, з трансляції.

     

    Context.sendBroadcast ()

       Те, що надсилається, є звичайним мовленням, і всі абоненти мають можливість отримати та обробити його.

     

    Context.sendOrderedBroadcast ()

       Відправка - це впорядкована трансляція. Система буде виконувати приймачі по одному відповідно до пріоритету, заявленого приймачем. Попередній приймач має право припинити трансляцію (BroadcastReceiver.abortBroadcast ()). Якщо трансляція припиняється попереднім приймачем, останній приймач більше не може отримати трансляцію. Для замовленої трансляції попередній приймач може зберігати результат обробки у намірі трансляції, а потім передавати його наступному приймачу.

     
    Широкомовний приймач (BroadcastReceiver) використовується для отримання трансляції Intent, а відправка трансляції Intent реалізується за допомогою виклику Context.sendBroadcast () та Context.sendOrderedBroadcast (). Зазвичай трансляційний намір може бути отриманий багатьма приймачами трансляції, підписаними на цей намір. Ця функція подібна до приймачів повідомлень Topic у JMS. Реалізувати метод широкомовного приймача можна таким чином:

     

    Перший крок: визначте широкомовний приймач, успадкуйте BroadcastReceiver і перепишіть метод onReceive ().

    відкритий клас IncomingSMSReceiver extendsBroadcastReceiver {
      @Override public void onReceive (Contextcontext, Intentintent) {
      }
    }

     

    Крок 2: Підпишіться на трансляцію Намір зацікавити, є два способи підписки:

    Перший тип: використовувати код для підписки (динамічна підписка)

    Фільтр IntentFilter = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiver приймач = newIncomingSMSReceiver ();
    registerReceiver (приймач, фільтр);

     

    Другий тип: Підпишіться на вузол у файлі AndroidManifest.xml (статична передплата)


      
           
      


    Давайте подивимось на різницю між підпискою на динамічну трансляцію та підпискою на статичну трансляцію:
    Статичну передплатну трансляцію також називають: резидентна трансляція. Коли ваша заявка закрита, якщо є широкомовне повідомлення, приймач, який ви написали, також може його отримати. Його метод реєстрації - AndroidManifast у вашому додатку. .xml для передплати.

     

    Динамічну трансляцію передплати також називають: трансляція нерезидентів. Коли програма закінчується, трансляція природним чином зникне. Наприклад, ви підписалися на трансляцію в операції onCreate або onResume, і ви повинні скасувати передплату на трансляцію в onDestory або onPause. В іншому випадку буде повідомлено про виняток, тому ваш приймач трансляції буде нерезидентом.

     

    Тут є ще одна деталь - два методи підписки. Відправляючи трансляції, вам слід звернути увагу на: метод неявного наміру використовується для динамічної реєстрації, тому вам потрібно використовувати неявний намір для надсилання при передачі трансляцій. , Інакше приймач мовлення не зможе прийняти трансляцію. Зверніть увагу на цей момент. Але підписуючись статично, оскільки він підписаний на AndroidMainfest.xml, можна використовувати дисплей Intent та неявний Intent під час надсилання трансляцій (звичайно, це лише для приймачів трансляції, визначених нами самими), тому про всяк випадок ми зазвичай використовуємо неявні Намір надіслати трансляцію.

     

    Давайте розглянемо приклад:

    Погляньте на структуру проекту:

     

    Погляньте на статичну трансляцію передплати:
    пакет 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 розширює Activity {

    @Перевернути
    захищена порожнеча onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Кнопка btn = (Кнопка) 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"
        package = "com.example.androidbroadcastdemo"
        android: versionCode = "1"
        android: versionName = "1.0">

        <uses-sdk
            android: minSdkVersion = "8"
            android: targetSdkVersion = "18" />
       
       
       
       
       
       

        <додаток
            android: allowBackup = "true"
            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 у широкомовному приймачі дуже проста, тобто друк вмісту Action.
    Запустіть програму, результат дуже простий, тут не картинка.

     

    Давайте подивимось на динамічні підписки:


    пакет 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 розширює Activity {
    До
    загальнодоступний статичний фінал Рядок NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
    захищений приймач UnSortBroadcastReceiver;
    До
    @Перевернути
    захищена порожнеча onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
    Кнопка btn0 = (Кнопка) findViewById (R.id.btn);
    btn0.setOnClickListener (новий OnClickListener () {
    public void onClick (View v) {
    // Надіслати трансляцію
    Намір it = новий намір (NEW_LIFEFORM_DETECTED);
    sendBroadcast (it);
    }
    });
    }

    @Перевернути
    захищена порожнеча onResume () {
    super.onResume ();
    // Реєстрація для трансляції
    IntentFilter counterActionFilter = новий IntentFilter (NEW_LIFEFORM_DETECTED);
    приймач = новий UnSortBroadcastReceiver ();
    registerReceiver (приймач, counterActionFilter);
    }

    @Перевернути
    захищена порожнеча onPause () {
    super.onPause ();
    // Скасувати трансляцію
    unregisterReceiver (приймач);
    }
    }
    Тут ми підписуємося на мовлення в onResume і скасовуємо підписку на мовлення в onPause.
    Змініть запущений Activity на DynamicRegisterBroadcastActivity в AndroidMainfest.xml. Інший вміст не потрібно модифікувати. Запустіть програму і роздрукуйте результат дуже просто, тому я не побачу тут зображення.

     

    Давайте подивимось на замовлене мовлення та невпорядковане мовлення

    Ми вже згадували про це на початку, давайте подивимось на невпорядковане мовлення:

    Спочатку визначимо два приймачі мовлення:

    Перший приймач:


    пакет com.broadcast.receiver;

    імпортувати android.content.BroadcastReceiver;
    імпортувати android.content.Context;
    імпортувати android.content.Intent;
    імпортувати android.util.Log;

    / **
     * Трансляційний приймач A
     * @автор weijiang204321
     *
     */
    публічний клас SortBroadcastReceiverA розширює BroadcastReceiver {

    @Перевернути
    public void onReceive (контекст контексту, намір за наміром) {
    Log.e ("Демо:", "приймач трансляції A");
    }

    }
    Другий приймач:

    пакет com.broadcast.receiver;

    імпортувати android.content.BroadcastReceiver;
    імпортувати android.content.Context;
    імпортувати android.content.Intent;
    імпортувати android.util.Log;

    / **
     * Трансляційний приймач B
     * @автор weijiang204321
     *
     */
    публічний клас SortBroadcastReceiverB розширює BroadcastReceiver {

    @Перевернути
    public void onReceive (контекст контексту, намір за наміром) {
    Log.e ("Демо:", "Трансляція B");
    }

    До
    До
    }


    Підпишіться на трансляцію в AndroidMainfest.xml


     
               
                   
               

           

               
                   
               

    результат операції:


    Результат запуску трохи дивний. Чому приймач B спереду, а приймач A ззаду? Причина в тому, що коли ми підписуємося на трансляцію в AndroidMainfest.xml, ми встановлюємо значення атрибута android: priority у фільтрі намірів. Чим більше значення, тим вище пріоритет. , Пріоритет приймача B - 1000, пріоритет приймача A - 999, тому B приймає спочатку трансляцію, а потім A приймає її, але між приймачем B і приймачем A немає зв'язку, і взаємодія не може бути Так, оскільки це неправильна трансляція і асинхронна, ми можемо провести експеримент, додавши код до методу onReceiver в B:

    abortBroadcast (); // Припинити передачу цієї трансляції

    результат операції:

     

    Ми бачимо швидку помилку, тобто невпорядкована трансляція не може припиняти трансляцію. Насправді припинення є марним, оскільки приймач А все ще приймає трансляцію.

     

    Давайте подивимось на впорядковане мовлення, код потрібно змінити:

    Перший - при відправленні трансляції:


    Трансляція намірів = новий намір ("com.broadcast.set.broadcast");
    sendOrderedBroadcast (трансляція, нуль);
    Потім додайте метод для припинення трансляції в приймачі B:
    abortBroadcast ();

    Інший код не потрібно модифікувати, результат операції:

     

    Існує лише приймач B, приймач A не приймає трансляцію, оскільки трансляція завершується в приймачі B, і наступні приймачі не можуть її прийняти.

    Змініть код нижче:

    Одержувач B:


    пакет com.broadcast.receiver;

    імпортувати android.content.BroadcastReceiver;
    імпортувати android.content.Context;
    імпортувати android.content.Intent;
    імпортувати android.os.Bundle;
    імпортувати android.util.Log;

    / **
     * Трансляційний приймач B
     * @автор weijiang204321
     *
     */
    публічний клас SortBroadcastReceiverB розширює BroadcastReceiver {

    @Перевернути
    public void onReceive (контекст контексту, намір за наміром) {
    Log.e ("Демо:", "приймач B трансляції");
    Bundle bundle = new Bundle ();
    bundle.putString ("наступний_одержувач", "наступний приймач трансляції");
    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 бездротовий передавати відео та аудіо простіше!

  • Контакти

    Адреса:
    No.305 Кімната HuiLan Будівля No273 Huanpu Road Гуанчжоу Китай 510620

    Електронна пошта:
    [захищено електронною поштою]

    Тел / WhatApps:
    +8618078869184

  • Категорії

  • Інформаційний бюлетень

    ПЕРШЕ ІЛІ ПІБНЕ ІМЯ

    E-mail

  • рішення PayPal  Вестерн юніонбанк Китаю
    Електронна пошта:[захищено електронною поштою]   WhatsApp: +8618078869184 Skype: sky198710021 Поговори зі мною
    Copyright 2006-2020 Powered By www.fmuser.org

    Зв'яжіться з нами