FMUSER безжично предаване на видео и аудио по-лесно!

[имейл защитен] WhatsApp + 8618078869184
Език

    Подробно обяснение на излъчването в Android

     

    Излъчването е разделено на два различни типа: "Нормално излъчване" и "Подредено излъчване". Обикновеното излъчване е напълно асинхронно и може да бъде получено от всички излъчващи приемници едновременно (логично). Ефективността на доставката на съобщения е сравнително висока, но недостатъкът е, че получателят не може да предаде резултата от обработката на следващия приемник и не може да бъде прекратен. Разпространение на разпространението на намерението; подреденото излъчване обаче се основава на приоритета, деклариран от приемника (деклариран в android: атрибут приоритет на елемента филтър за намерение, колкото по-голям е броят, толкова по-висок е приоритетът, диапазонът на стойностите: -1000 до 1000 възможно Извикване на setPriority () на обекта IntentFilter за задаване) и получателят получава излъчването на свой ред. Например, ако нивото на A е по-високо от това на B и нивото на B е по-високо от C, тогава излъчването първо се предава на A, след това на B и накрая на C. След като A получава излъчването, то може да съхранява данни в излъчването. Когато излъчването е изпратено до B, B може да получи данните, съхранявани от A, от излъчването.

     

    Context.sendBroadcast ()

       Изпратеното е обикновено излъчване и всички абонати имат възможност да го получат и обработят.

     

    Context.sendOrderedBroadcast ()

       Изпращането е подредено излъчване. Системата ще изпълнява приемниците един по един в съответствие с приоритета, деклариран от приемника. Предишният приемник има право да прекрати излъчването (BroadcastReceiver.abortBroadcast ()). Ако излъчването е прекратено от предишния приемник, последният Приемникът вече не може да получи излъчването. За подредено излъчване предишният приемник може да съхранява резултата от обработката в намерението за излъчване и след това да го предаде на следващия приемник.

     
    Излъчващият приемник (BroadcastReceiver) се използва за получаване на излъчвано намерение, а изпращането на излъчваното намерение се осъществява чрез извикване на Context.sendBroadcast () и Context.sendOrderedBroadcast (). Обикновено излъчваното намерение може да бъде получено от множество излъчващи приемници, абонирани за това намерение. Тази функция е подобна на получателите на съобщения за тема в 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, е възможно да се използва дисплейно намерение и неявно намерение при изпращане на излъчвания (разбира се това е само за излъчващи приемници, дефинирани от самите нас), така че за всеки случай обикновено използваме неявни Намерение за изпращане на излъчване.

     

    Нека разгледаме един пример:

    Разгледайте структурата на проекта:

     

    Разгледайте статичното абонаментно излъчване:
    пакет 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"
        пакет = "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 в излъчващия приемник е много проста, а именно да отпечата съдържанието на действието.
    Стартирайте програмата, резултатът е много прост, тук не е картината.

     

    Нека да разгледаме динамичните абонаменти:


    пакет 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.
    Променете стартираната дейност на 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 и следващите приемници не могат да го приемат.

    Променете кода по-долу:

    Получател Б:


    пакет 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 = нов Bundle ();
    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 -> Italian
      ja.fmuser.org -> японски
      ko.fmuser.org -> корейски
      lv.fmuser.org -> латвийски
      lt.fmuser.org -> Литовски
      mk.fmuser.org -> македонски
      ms.fmuser.org -> малайски
      mt.fmuser.org -> Малтийски
      no.fmuser.org -> Norwegian
      fa.fmuser.org -> персийски
      pl.fmuser.org -> полски
      pt.fmuser.org -> португалски
      ro.fmuser.org -> Romanian
      ru.fmuser.org -> руски
      sr.fmuser.org -> сръбски
      sk.fmuser.org -> словашки
      sl.fmuser.org -> Словенски
      es.fmuser.org -> испански
      sw.fmuser.org -> суахили
      sv.fmuser.org -> шведски
      th.fmuser.org -> Thai
      tr.fmuser.org -> турски
      uk.fmuser.org -> украински
      ur.fmuser.org -> урду
      vi.fmuser.org -> Виетнамски
      cy.fmuser.org -> уелски
      yi.fmuser.org -> Идиш

       
  •  

    FMUSER безжично предаване на видео и аудио по-лесно!

  • Контакти

    Адрес
    No.305 Стая HuiLan Сграда No.273 Huanpu Road Гуанджоу Китай 510620

    Мейл:
    [имейл защитен]

    Тел / WhatApps:
    +8618078869184

  • Категории

  • Бюлетин

    ПЪРВО ИЛИ ПЪЛНО ИМЕ

    E-mail

  • разтвор PayPal  Western UnionЦентралната банка на Китай
    Мейл:[имейл защитен]   WhatsApp: +8618078869184 Skype: sky198710021 Пиши си с мен
    Copyright 2006-2020 Powered By www.fmuser.org

    Свържи се с нас