FMUSER Wirless Transmituj wideo i audio łatwiejsze!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albański
ar.fmuser.org -> arabski
hy.fmuser.org -> Armeński
az.fmuser.org -> Azerbejdżański
eu.fmuser.org -> baskijski
be.fmuser.org -> białoruski
bg.fmuser.org -> bułgarski
ca.fmuser.org -> kataloński
zh-CN.fmuser.org -> chiński (uproszczony)
zh-TW.fmuser.org -> chiński (tradycyjny)
hr.fmuser.org -> chorwacki
cs.fmuser.org -> czeski
da.fmuser.org -> duński
nl.fmuser.org -> holenderski
et.fmuser.org -> estoński
tl.fmuser.org -> filipiński
fi.fmuser.org -> fiński
fr.fmuser.org -> francuski
gl.fmuser.org -> galicyjski
ka.fmuser.org -> gruziński
de.fmuser.org -> niemiecki
el.fmuser.org -> grecki
ht.fmuser.org -> kreolski haitański
iw.fmuser.org -> hebrajski
hi.fmuser.org -> hindi
hu.fmuser.org -> węgierski
is.fmuser.org -> islandzki
id.fmuser.org -> indonezyjski
ga.fmuser.org -> irlandzki
it.fmuser.org -> włoski
ja.fmuser.org -> japoński
ko.fmuser.org -> koreański
lv.fmuser.org -> łotewski
lt.fmuser.org -> litewski
mk.fmuser.org -> macedoński
ms.fmuser.org -> malajski
mt.fmuser.org -> maltański
no.fmuser.org -> norweski
fa.fmuser.org -> perski
pl.fmuser.org -> polski
pt.fmuser.org -> portugalski
ro.fmuser.org -> rumuński
ru.fmuser.org -> rosyjski
sr.fmuser.org -> serbski
sk.fmuser.org -> słowacki
sl.fmuser.org -> słoweński
es.fmuser.org -> hiszpański
sw.fmuser.org -> suahili
sv.fmuser.org -> szwedzki
th.fmuser.org -> Tajski
tr.fmuser.org -> turecki
uk.fmuser.org -> ukraiński
ur.fmuser.org -> Urdu
vi.fmuser.org -> wietnamski
cy.fmuser.org -> walijski
yi.fmuser.org -> jidysz
Transmisje dzielą się na dwa rodzaje: „Audycje zwykłe” i „Audycje zamówione”. Zwykła transmisja jest całkowicie asynchroniczna i może być odbierana przez wszystkich odbiorców w tym samym czasie (logicznie). Wydajność dostarczania wiadomości jest stosunkowo wysoka, ale wadą jest to, że odbiorca nie może przekazać wyniku przetwarzania do następnego odbiorcy i nie można go zakończyć. Rozpowszechnianie intencji transmisji; jednak rozgłaszanie zamówione odbywa się na podstawie zadeklarowanego przez odbiorcę priorytetu (zadeklarowanego w atrybucie android:priority elementu zamierzającego filtrować, im większa liczba, tym wyższy priorytet, zakres wartości: -1000 do 1000. Jest to również możliwe Wywołaj metodę setPriority() obiektu IntentFilter, aby ustawić), a odbiorca po kolei odbierze rozgłoszenie. Na przykład, jeśli poziom A jest wyższy niż poziom B, a poziom B jest wyższy niż C, wówczas rozgłoszenie jest najpierw transmitowane do A, następnie do B, a na koniec do C. Po odebraniu rozgłoszenia, może przechowywać dane w transmisji. Kiedy transmisja jest wysyłana do B, B może pobrać dane przechowywane przez A z transmisji.
Kontekst.sendBroadcast()
Wysyłana jest zwykła transmisja, a wszyscy abonenci mają możliwość jej otrzymania i przetworzenia.
Context.sendOrderedBroadcast()
Wysyłanie jest uporządkowaną transmisją. System wykona kolejno odbiorniki zgodnie z zadeklarowanym przez odbiornik priorytetem. Poprzedni odbiorca ma prawo przerwać rozgłaszanie (BroadcastReceiver.abortBroadcast()). Jeśli transmisja zostanie zakończona przez poprzedniego odbiorcę, ten ostatni Odbiorca nie może już odbierać transmisji. W przypadku rozgłaszania uporządkowanego poprzedni odbiorca może zapisać wynik przetwarzania w rozgłoszeniu Intent, a następnie przekazać go do następnego odbiorcy.
Odbiornik rozgłoszeniowy (BroadcastReceiver) jest używany do odbierania Intencji rozgłoszeniowej, a wysyłanie Intencji rozgłoszeniowej jest realizowane przez wywołanie Context.sendBroadcast() i Context.sendOrderedBroadcast(). Zwykle Intencja rozgłoszeniowa może być odbierana przez wiele odbiorników rozgłoszeniowych subskrybujących tę Intencję. Ta funkcja jest podobna do odbiorników komunikatów Topic w JMS. Aby zaimplementować metodę odbiornika rozgłoszeniowego, należy wykonać następujące czynności:
Pierwszy krok: zdefiniuj odbiornik rozgłoszeniowy, odziedzicz BroadcastReceiver i przepisz metodę onReceive().
klasa publiczna PrzychodząceSMSReceiver extendsBroadcastReceiver {
@Override public void onReceive (kontekst kontekstowy, intencja) {
}
}
Krok 2: Zapisz się na audycję Zainteresowany, istnieją dwie metody subskrypcji:
Pierwszy typ: użyj kodu do subskrypcji (subskrypcja dynamiczna)
Filtr IntentFilter = newIntentFilter("android.provider.Telephony.SMS_RECEIVED");
Odbiornik przychodzącego SMSReceiver = newIncomingSMSReceiver();
registerReceiver(odbiornik, filtr);
Drugi typ: Subskrybuj w węzeł w pliku AndroidManifest.xml (subskrypcja statyczna)
Przyjrzyjmy się różnicy między dynamiczną subskrypcją transmisji a statyczną subskrypcją transmisji:
Emisja statyczna w abonamencie nazywana jest także: audycją rezydentną. Gdy Twoja aplikacja zostanie zamknięta, jeśli pojawi się komunikat rozgłoszeniowy, napisany przez Ciebie odbiornik rozgłoszeniowy również może go odebrać. Jego metodą rejestracji jest AndroidManifast w Twojej aplikacji. .xml do subskrypcji.
Dynamiczna transmisja subskrypcyjna nazywana jest także: transmisją nierezydentną. Po zakończeniu aplikacji transmisja naturalnie zniknie. Na przykład subskrybujesz transmisję w onCreate lub onResume w działaniu i musisz anulować subskrypcję transmisji w onDestory lub onPause. W przeciwnym razie zostanie zgłoszony wyjątek, więc Twój odbiorca będzie nierezydentem.
Jest jeszcze jeden szczegół, a mianowicie dwie metody subskrypcji. Podczas wysyłania rozgłoszeń należy zwrócić uwagę na: Metoda niejawnej intencji jest używana do rejestracji dynamicznej, dlatego podczas wysyłania rozgłoszeń należy użyć niejawnej intencji wysyłania. , W przeciwnym razie odbiornik nie będzie mógł odbierać programu. Zwróć uwagę na ten punkt. Ale subskrybując statycznie, ponieważ jest to subskrybowane w AndroidMainfest.xml, możliwe jest użycie display Intent i implicit Intent podczas wysyłania transmisji (oczywiście dotyczy to tylko zdefiniowanych przez nas odbiorników transmisji), więc na wszelki wypadek generalnie używamy implicit Zamiar wysłania transmisji.
Spójrzmy na przykład:
Spójrz na strukturę projektu:
Spójrz na statyczną transmisję subskrypcyjną:
pakiet com.broadcast.demo;
importuj android.app.Activity;
importuj android.content.Intent;
importuj android.os.Bundle;
importuj android.view.View;
importuj android.view.View.OnClickListener;
importuj android.widget.Button;
import com.example.androidbroadcastdemo.R;
/ **
* Statyczna transmisja subskrypcyjna
* @autor weijiang204321
*
*/
klasa publiczna StaticRegisterBroadcastActivity rozszerza działanie {
@Nadpisanie
protected void onCreate (Bundle savingInstanceState) {
super.onCreate (saveInstanceState);
setContentView (R.layout.activity_main);
Przycisk btn = (Przycisk)findViewById(R.id.btn);
Do
btn.setOnClickListener(nowy OnClickListener(){
@Nadpisanie
public void onClick (View v) {
//Użyj statycznego sposobu rejestracji emisji, możesz użyć zamiaru wyświetlania, aby wysłać transmisję
Transmisja intencji = new Intent("com.broadcast.set.broadcast");
sendBroadcast(transmisja,null);
}
Do
});
}
Do
}
Subskrybuj w AndroidMainfest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidbroadcastdemo"
android:kod wersji="1"
android:nazwa_wersji="1.0">
<używa-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<aplikacja
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/nazwa_aplikacji"
android:theme="@style/Motyw aplikacji">
<aktywność
android:name="com.broadcast.demo.StaticRegisterBroadcastActivity"
android:label="@string/nazwa_aplikacji">
Na razie nie martw się o inne treści, o czym porozmawiamy później, tutaj skupiamy się tylko na rejestracji transmisji statycznych
Przyjrzyjmy się odbiorcy transmisji:
pakiet com.broadcast.receiver;
importuj android.content.BroadcastReceiver;
importuj android.content.Context;
importuj android.content.Intent;
importuj android.util.Log;
/ **
* Odbiornik transmisji
* @autor weijiang204321
*
*/
klasa publiczna UnSortBroadcastReceiver rozszerza BroadcastReceiver {
@Nadpisanie
public void onReceive (kontekst kontekstowy, zamiar zamiaru) {
Log.e("Intent_Action:",intent.getAction()+"");
}
}
Logika w metodzie onReceive w odbiorniku rozgłoszeniowym jest bardzo prosta, polega na wydrukowaniu zawartości Akcji.
Uruchom program, wynik jest bardzo prosty, tutaj nie ma obrazu.
Przyjrzyjmy się subskrypcjom dynamicznym:
pakiet com.broadcast.demo;
importuj android.app.Activity;
importuj android.content.Intent;
importuj android.content.IntentFilter;
importuj android.os.Bundle;
importuj android.view.View;
importuj android.view.View.OnClickListener;
importuj android.widget.Button;
importuj com.broadcast.receiver.UnSortBroadcastReceiver;
import com.example.androidbroadcastdemo.R;
/ **
* Użyj dynamicznego sposobu rejestracji transmisji
* @autor weijiang204321
*
*/
klasa publiczna DynamicRegisterBroadcastActivity rozszerza działanie {
Do
public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
chroniony odbiornik UnSortBroadcastReceiver;
Do
@Nadpisanie
protected void onCreate (Bundle savingInstanceState) {
super.onCreate (saveInstanceState);
setContentView (R.layout.activity_main);
Przycisk btn0 = (Przycisk) findViewById(R.id.btn);
btn0.setOnClickListener(nowy OnClickListener() {
public void onClick (View v) {
//Wyślij transmisję
Zamiar to = nowy zamiar (NEW_LIFEFORM_DETECTED);
wyślijBroadcast(to);
}
});
}
@Nadpisanie
protected void onResume () {
super.onResume ();
//Zarejestruj się do transmisji
IntentFilter counterActionFilter = nowy IntentFilter(NEW_LIFEFORM_DETECTED);
odbiornik = new UnSortBroadcastReceiver();
registerReceiver(odbiornik, counterActionFilter);
}
@Nadpisanie
chroniony void onPause() {
super.onPause();
//Anuluj transmisję
unregisterReceiver(odbiornik);
}
}
Tutaj subskrybujemy transmisję w onResume i anulujemy subskrypcję transmisji w onPause.
Zmień uruchomioną aktywność na DynamicRegisterBroadcastActivity w pliku AndroidMainfest.xml. Pozostałe treści nie wymagają modyfikacji. Uruchom program i wydrukuj wynik jest bardzo prosty, więc nie zobaczę tutaj obrazu.
Przyjrzyjmy się rozgłaszaniu uporządkowanemu i nieuporządkowanemu
Wspomnieliśmy już o tym na początku, spójrzmy na nieuporządkowane nadawanie:
Najpierw definiujemy dwa odbiorniki rozgłoszeniowe:
Pierwszy odbiornik nadawczy:
pakiet com.broadcast.receiver;
importuj android.content.BroadcastReceiver;
importuj android.content.Context;
importuj android.content.Intent;
importuj android.util.Log;
/ **
* Odbiornik transmisji A
* @autor weijiang204321
*
*/
klasa publiczna SortBroadcastReceiverA rozszerza BroadcastReceiver{
@Nadpisanie
public void onReceive (kontekst kontekstowy, zamiar zamiaru) {
Log.e("Demonstracja:","Odbiornik transmisji A");
}
}
Drugi odbiornik nadawczy:
pakiet com.broadcast.receiver;
importuj android.content.BroadcastReceiver;
importuj android.content.Context;
importuj android.content.Intent;
importuj android.util.Log;
/ **
* Odbiornik transmisji B
* @autor weijiang204321
*
*/
klasa publiczna SortBroadcastReceiverB rozszerza BroadcastReceiver{
@Nadpisanie
public void onReceive (kontekst kontekstowy, zamiar zamiaru) {
Log.e("Demonstracja:","Emisja B");
}
Do
Do
}
Subskrybuj transmisję w pliku AndroidMainfest.xml
wynik operacji:
Wynik biegu jest nieco dziwny. Dlaczego odbiornik B jest z przodu, a odbiornik A z tyłu? Powodem jest to, że kiedy subskrybujemy transmisję w AndroidMainfest.xml, ustawiamy wartość atrybutu android:priority w filtrze zamiarów. Im większa wartość, tym wyższy priorytet. , Priorytet odbiornika B wynosi 1000, priorytet odbiornika A wynosi 999, więc B odbiera transmisję jako pierwszy, a następnie odbiera go A, ale nie ma połączenia między odbiornikiem B a odbiornikiem A i nie może być żadnej interakcji Tak, ponieważ jest to rozgłaszanie poza kolejnością i asynchroniczne, możemy przeprowadzić eksperyment, dodając kod do metody onReceiver w B:
abortBroadcast();//Zakończ transmisję tej transmisji
wynik operacji:
Widzimy błąd monitu, to znaczy nie zamówiona transmisja nie może zakończyć transmisji. W rzeczywistości zakończenie jest bezużyteczne, ponieważ odbiornik A nadal odbiera transmisję.
Przyjrzyjmy się uporządkowanemu rozgłaszaniu, kod wymaga modyfikacji:
Pierwszym z nich jest wysyłanie transmisji:
Transmisja intencji = new Intent("com.broadcast.set.broadcast");
sendOrderedBroadcast(transmisja,null);
Następnie dodaj metodę zakończenia transmisji w odbiorniku B:
przerwanie transmisji();
Innego kodu nie trzeba modyfikować, wynik operacji:
Jest tylko odbiornik B, odbiornik A nie odbiera transmisji, ponieważ transmisja jest zakończona w odbiorniku B, a kolejni odbiorcy nie mogą jej odebrać.
Zmodyfikuj poniższy kod:
Odbiorca B:
pakiet com.broadcast.receiver;
importuj android.content.BroadcastReceiver;
importuj android.content.Context;
importuj android.content.Intent;
importuj android.os.Bundle;
importuj android.util.Log;
/ **
* Odbiornik transmisji B
* @autor weijiang204321
*
*/
klasa publiczna SortBroadcastReceiverB rozszerza BroadcastReceiver{
@Nadpisanie
public void onReceive (kontekst kontekstowy, zamiar zamiaru) {
Log.e("Demonstracja:","Odbiornik transmisji B");
Pakiet bundle = nowy Bundle ();
bundle.putString("next_receiver", "następny odbiornik transmisji");
setResultExtras(pakiet);
}
Do
}
Po odebraniu transmisji B zapisuje pewną wartość i przekazuje ją następnemu odbiorcy.
Kod odbiorcy A:
pakiet com.broadcast.receive
Nasze inne produkty:
Profesjonalny pakiet wyposażenia stacji radiowych FM
|
||
|
Wpisz e-mail, aby otrzymać niespodziankę
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albański
ar.fmuser.org -> arabski
hy.fmuser.org -> Armeński
az.fmuser.org -> Azerbejdżański
eu.fmuser.org -> baskijski
be.fmuser.org -> białoruski
bg.fmuser.org -> bułgarski
ca.fmuser.org -> kataloński
zh-CN.fmuser.org -> chiński (uproszczony)
zh-TW.fmuser.org -> chiński (tradycyjny)
hr.fmuser.org -> chorwacki
cs.fmuser.org -> czeski
da.fmuser.org -> duński
nl.fmuser.org -> holenderski
et.fmuser.org -> estoński
tl.fmuser.org -> filipiński
fi.fmuser.org -> fiński
fr.fmuser.org -> francuski
gl.fmuser.org -> galicyjski
ka.fmuser.org -> gruziński
de.fmuser.org -> niemiecki
el.fmuser.org -> grecki
ht.fmuser.org -> kreolski haitański
iw.fmuser.org -> hebrajski
hi.fmuser.org -> hindi
hu.fmuser.org -> węgierski
is.fmuser.org -> islandzki
id.fmuser.org -> indonezyjski
ga.fmuser.org -> irlandzki
it.fmuser.org -> włoski
ja.fmuser.org -> japoński
ko.fmuser.org -> koreański
lv.fmuser.org -> łotewski
lt.fmuser.org -> litewski
mk.fmuser.org -> macedoński
ms.fmuser.org -> malajski
mt.fmuser.org -> maltański
no.fmuser.org -> norweski
fa.fmuser.org -> perski
pl.fmuser.org -> polski
pt.fmuser.org -> portugalski
ro.fmuser.org -> rumuński
ru.fmuser.org -> rosyjski
sr.fmuser.org -> serbski
sk.fmuser.org -> słowacki
sl.fmuser.org -> słoweński
es.fmuser.org -> hiszpański
sw.fmuser.org -> suahili
sv.fmuser.org -> szwedzki
th.fmuser.org -> Tajski
tr.fmuser.org -> turecki
uk.fmuser.org -> ukraiński
ur.fmuser.org -> Urdu
vi.fmuser.org -> wietnamski
cy.fmuser.org -> walijski
yi.fmuser.org -> jidysz
FMUSER Wirless Transmituj wideo i audio łatwiejsze!
Kontakt
Adres:
Nr 305 Pokój HuiLan Budynek nr 273 Huanpu Road Guangzhou Chiny 510620
Kategorie
Newsletter