FMUSER Kablosuz Video ve Sesi Daha Kolay İletin!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Arnavutça
ar.fmuser.org -> Arapça
hy.fmuser.org -> Ermeni
az.fmuser.org -> Azerice
eu.fmuser.org -> Bask Dili
be.fmuser.org -> Beyaz Rusça
bg.fmuser.org -> Bulgar
ca.fmuser.org -> Katalanca
zh-CN.fmuser.org -> Çince (Basitleştirilmiş)
zh-TW.fmuser.org -> Çince (Geleneksel)
hr.fmuser.org -> Hırvatça
cs.fmuser.org -> Çekçe
da.fmuser.org -> Danca
nl.fmuser.org -> Hollandalı
et.fmuser.org -> Estonca
tl.fmuser.org -> Filipinli
fi.fmuser.org -> Fince
fr.fmuser.org -> Fransızca
gl.fmuser.org -> Galiçyaca
ka.fmuser.org -> Gürcüce
de.fmuser.org -> Almanca
el.fmuser.org -> Yunanca
ht.fmuser.org -> Haiti Kreyolu
iw.fmuser.org -> İbranice
hi.fmuser.org -> Hintçe
hu.fmuser.org -> Macar
is.fmuser.org -> İzlandaca
id.fmuser.org -> Endonezya
ga.fmuser.org -> İrlandalı
it.fmuser.org -> İtalyan
ja.fmuser.org -> Japonca
ko.fmuser.org -> Korece
lv.fmuser.org -> Letonca
lt.fmuser.org -> Litvanya
mk.fmuser.org -> Makedonca
ms.fmuser.org -> Malayca
mt.fmuser.org -> Malta
no.fmuser.org -> Norveç
fa.fmuser.org -> Farsça
pl.fmuser.org -> Lehçe
pt.fmuser.org -> Portekizce
ro.fmuser.org -> Romen
ru.fmuser.org -> Rusça
sr.fmuser.org -> Sırpça
sk.fmuser.org -> Slovakça
sl.fmuser.org -> Slovence
es.fmuser.org -> İspanyolca
sw.fmuser.org -> Svahili
sv.fmuser.org -> İsveççe
th.fmuser.org -> Tay
tr.fmuser.org -> Türkçe
uk.fmuser.org -> Ukraynaca
ur.fmuser.org -> Urduca
vi.fmuser.org -> Vietnamca
cy.fmuser.org -> Galce
yi.fmuser.org -> Yidiş
Yayın, iki farklı türe ayrılır: "Normal yayınlar" ve "Sıralı yayınlar". Sıradan yayın tamamen eşzamansızdır ve tüm yayın alıcıları tarafından aynı anda (mantıksal olarak) alınabilir. Mesaj dağıtımının verimliliği nispeten yüksektir, ancak dezavantajı, alıcının işlem sonucunu bir sonraki alıcıya iletememesi ve sonlandırılamamasıdır. Yayın Amacı yayılımı; ancak, sıralı yayın, alıcı tarafından bildirilen önceliğe dayanır (android'de beyan edilir: amaç filtresi öğesinin öncelik özniteliği, sayı ne kadar büyükse, öncelik o kadar yüksek, değer aralığı: -1000 ila 1000'dir. olası Ayarlanacak IntentFilter nesnesinin setPriority () yöntemini çağırın) ve alıcı, sırayla yayını alır. Örneğin, A'nın seviyesi B'ninkinden yüksekse ve B'nin seviyesi C'den yüksekse, yayın önce A'ya, sonra B'ye ve son olarak C'ye iletilir. A yayını aldıktan sonra, yayın verileri yayında saklayabilir. Yayın B'ye gönderildiğinde, B yayından A tarafından depolanan verileri alabilir.
Context.sendBroadcast ()
Gönderilen şey sıradan bir yayındır ve tüm abonelerin bunu alma ve işleme fırsatı vardır.
Context.sendOrderedBroadcast ()
Gönderme, düzenli bir yayındır. Sistem, alıcının beyan ettiği önceliğe göre alıcıları tek tek çalıştıracaktır. Önceki alıcı yayını sonlandırma hakkına sahiptir (BroadcastReceiver.abortBroadcast ()). Yayın önceki alıcı tarafından sonlandırılırsa, sonuncusu Alıcı artık yayını alamaz. Sipariş edilen yayın için, önceki alıcı işleme sonucunu yayın Hedefinde saklayabilir ve ardından sonraki alıcıya iletebilir.
Yayın alıcısı (BroadcastReceiver), yayın Amacını almak için kullanılır ve yayın Amacının gönderilmesi, Context.sendBroadcast () ve Context.sendOrderedBroadcast () çağrılarak gerçekleştirilir. Genellikle bir yayın Niyeti, bu Niyete abone olan birden çok yayın alıcısı tarafından alınabilir. Bu özellik, JMS'deki Konu mesajı alıcılarına benzer. Bir yayın alıcısı yöntemi uygulamak için aşağıdaki gibidir:
İlk adım: yayın alıcısını tanımlama, BroadcastReceiver'ı devralma ve onReceive () yöntemini yeniden yazma.
public class GelenSMSRalıcı,BroadcastReceiver'ı genişletir {
@Override public void onReceive (Contextcontext, Intentintent) {
}
}
Adım 2: İlgi konusu yayına abone olun, iki abonelik yöntemi vardır:
İlk tür: abone olmak için kod kullanın (dinamik abonelik)
IntentFilter filtresi = newIntentFilter ("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver alıcı = newIncomingSMSReceiver ();
registerReceiver (alıcı, filtre);
İkinci tür: AndroidManifest.xml dosyasındaki düğüm (statik abonelik)
Dinamik yayın aboneliği ile statik yayın aboneliği arasındaki farka bir göz atalım:
Statik abonelik yayını, yerleşik yayın olarak da adlandırılır. Uygulamanız kapatıldığında yayın mesajı varsa yazdığınız yayın alıcısı da alabilir. Uygulamanızdaki kayıt yöntemi AndroidManifast'tır. abonelik için .xml.
Dinamik abonelik yayını, yerleşik olmayan yayın olarak da adlandırılır. Uygulama sona erdiğinde, yayın doğal olarak kaybolacaktır. Örneğin, etkinlikte onCreate veya onResume'daki yayına abone olursunuz ve onDestory veya onPause'da yayın aboneliğini iptal etmeniz gerekir. Aksi takdirde, bir istisna rapor edilecektir, bu nedenle yayın alıcınız ikamet etmeyecektir.
Burada iki abonelik yöntemi olan bir ayrıntı daha var. Yayın gönderirken şunlara dikkat etmeniz gerekir: Örtük amaç yöntemi dinamik kayıt için kullanılır, bu nedenle yayınları gönderirken göndermek için örtük niyet kullanmanız gerekir. Aksi takdirde yayın alıcısı yayını alamayacaktır. Bu noktaya dikkat edin. Ancak statik olarak abone olurken, AndroidMainfest.xml'de abone olduğu için, yayın gönderirken görüntüleme Amaçlı ve örtük Amaç kullanmak mümkündür (elbette bu yalnızca kendimiz tarafından tanımlanan yayın alıcıları içindir), bu nedenle, her ihtimale karşı, genellikle örtük kullanırız Yayın gönderme niyeti.
Bir örneğe bakalım:
Proje yapısına bir göz atın:
Statik abonelik yayınına bir göz atın:
paket com.broadcast.demo;
android.app.Activity içe aktarımı;
ithal android.content.Intent;
android.os.Bundle'ı içe aktarın;
android.view.View dosyasını içe aktarın;
android.view.View.OnClickListener'ı içe aktarın;
android.widget.Button'ı içe aktarın;
com.example.androidbroadcastdemo.R'yi içe aktarın;
/ **
* Statik abonelik yayını
* @yazar weijiang204321
*
*/
public class StaticRegisterBroadcastActivity, Activity {
@Override
korumalı void onCreate (Bundle registeredInstanceState) {
super.onCreate (SavedInstanceState);
setContentView (R.layout.activity_main);
Düğme btn = (Düğme) findViewById (R.id.btn);
için
btn.setOnClickListener (new OnClickListener () {
@Override
public void onClick (View v) {
// Yayını kaydetmek için statik bir yol kullanın, yayını göndermek için görüntüleme amacını kullanabilirsiniz
Amaç yayını = yeni Amaç ("com.broadcast.set.broadcast");
sendBroadcast (yayın, boş);
}
için
});
}
için
}
AndroidMainfest.xml'de abone olun:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package = "com.example.androidbroadcastdemo"
android: versionCode = "1"
android: versionName = "1.0">
<sdk'yi kullanır
android: minSdkVersion = "8"
android: targetSdkVersion = "18" />
<uygulama
android: allowBackup = "true"
android: icon = "@ drawable / ic_launcher"
android: label = "@ string / app_name"
android: theme = "@ style / AppTheme">
<aktivite
android: name = "com.broadcast.demo.StaticRegisterBroadcastActivity"
android: label = "@ string / app_name">
Şimdilik diğer içerik için endişelenmeyin, daha sonra bahsedeceğimiz gibi, burada sadece statik yayınların kayıtlarına odaklanıyoruz.
Yayının alıcısına bir göz atalım:
paket com.broadcast.receiver;
ithal android.content.BroadcastReceiver;
android.content.Context'i içe aktarın;
ithal android.content.Intent;
android.util.Log'u içe aktar;
/ **
* Yayın alıcı
* @yazar weijiang204321
*
*/
public class UnSortBroadcastReceiver, BroadcastReceiver'ı genişletir {
@Override
public void onReceive (Bağlam bağlamı, Amaç amacı) {
Log.e ("Intent_Action:", intent.getAction () + "");
}
}
Yayın alıcısındaki onReceive yöntemindeki mantık çok basittir, yani Eylemin içeriğini yazdırmaktır.
Programı çalıştırın, sonuç çok basit, burada resim yok.
Dinamik aboneliklere bir göz atalım:
paket com.broadcast.demo;
android.app.Activity içe aktarımı;
ithal android.content.Intent;
ithal android.content.IntentFilter;
android.os.Bundle'ı içe aktarın;
android.view.View dosyasını içe aktarın;
android.view.View.OnClickListener'ı içe aktarın;
android.widget.Button'ı içe aktarın;
com.broadcast.receiver.UnSortBroadcastReceiver'ı içe aktarın;
com.example.androidbroadcastdemo.R'yi içe aktarın;
/ **
* Yayını kaydetmek için dinamik bir yol kullanın
* @yazar weijiang204321
*
*/
public class DynamicRegisterBroadcastActivity, Aktiviteyi genişletir {
için
public static final String NEW_LIFEFORM_DETECTED = "com.dxz.broadcasttest.NEW_LIFEFORM";
korumalı UnSortBroadcastReceiver alıcısı;
için
@Override
korumalı void onCreate (Bundle registeredInstanceState) {
super.onCreate (SavedInstanceState);
setContentView (R.layout.activity_main);
Düğme btn0 = (Düğme) findViewById (R.id.btn);
btn0.setOnClickListener (new OnClickListener () {
public void onClick (View v) {
// Yayın gönder
Amaç o = yeni Amaç (NEW_LIFEFORM_DETECTED);
sendBroadcast (it);
}
});
}
@Override
korumalı void onResume () {
super.onResume ();
// Yayına kaydol
IntentFilter counterActionFilter = yeni IntentFilter (NEW_LIFEFORM_DETECTED);
alıcı = new UnSortBroadcastReceiver ();
registerReceiver (alıcı, counterActionFilter);
}
@Override
korumalı void onPause () {
super.onPause ();
// Yayını iptal et
unregisterReceiver (alıcı);
}
}
Burada onResume'da yayına abone oluyoruz ve onPause'da yayın aboneliğinden çıkıyoruz.
AndroidMainfest.xml'de başlatılan Activity'i DynamicRegisterBroadcastActivity olarak değiştirin. Diğer içeriğin değiştirilmesine gerek yoktur. Programı çalıştırın ve sonucu yazdırmak çok basit, bu yüzden burada resmi görmeyeceğim.
Sıralı yayın ve sırasız yayına bir göz atalım
Başta bundan daha önce bahsetmiştik, düzensiz yayınlara bir göz atalım:
İlk önce iki yayın alıcısı tanımlıyoruz:
İlk yayın alıcısı:
paket com.broadcast.receiver;
ithal android.content.BroadcastReceiver;
android.content.Context'i içe aktarın;
ithal android.content.Intent;
android.util.Log'u içe aktar;
/ **
* Yayın alıcısı A
* @yazar weijiang204321
*
*/
genel sınıf SortBroadcastReceiverA BroadcastReceiver'ı genişletir {
@Override
public void onReceive (Bağlam bağlamı, Amaç amacı) {
Log.e ("Demo:", "yayın alıcısı A");
}
}
İkinci yayın alıcısı:
paket com.broadcast.receiver;
ithal android.content.BroadcastReceiver;
android.content.Context'i içe aktarın;
ithal android.content.Intent;
android.util.Log'u içe aktar;
/ **
* Yayın alıcısı B
* @yazar weijiang204321
*
*/
genel sınıf SortBroadcastReceiverB, BroadcastReceiver'ı genişletir {
@Override
public void onReceive (Bağlam bağlamı, Amaç amacı) {
Log.e ("Demo:", "Yayın B");
}
için
için
}
AndroidMainfest.xml'de yayına abone olun
operasyon sonucu:
Sonuç biraz tuhaf. Neden alıcı B önde ve alıcı A arkada? Bunun nedeni, AndroidMainfest.xml'deki yayına abone olduğumuzda, amaç filtresinde android: öncelik öznitelik değerini belirlememizdir. Değer ne kadar büyükse, öncelik o kadar yüksek olur. , B alıcısının önceliği 1000'dir, A alıcısının önceliği 999'dur, bu nedenle B önce yayını alır ve sonra A alır, ancak alıcı B ile alıcı A arasında bağlantı yoktur ve etkileşim olamaz Evet, Bu bir sıra dışı yayın ve eşzamansız olduğu için, B'deki onReceiver yöntemine kod ekleyerek bir deney yapabiliriz:
abortBroadcast (); // Bu yayının iletimini sonlandırın
operasyon sonucu:
Anında hatayı görebiliyoruz, yani sırasız yayının yayını sonlandırmasına izin verilmiyor. Aslında, sonlandırma işe yaramaz, çünkü A alıcısı yayını almaya devam ediyor.
Düzenli yayına bir göz atalım, kodun değiştirilmesi gerekiyor:
Birincisi, bir yayın gönderirken:
Amaç yayını = yeni Amaç ("com.broadcast.set.broadcast");
sendOrderedBroadcast (yayın, boş);
Ardından, B alıcısında yayını sonlandırmak için bir yöntem ekleyin:
abortBroadcast ();
Diğer kodun değiştirilmesine gerek yoktur, işlem sonucu:
Yalnızca alıcı B vardır, alıcı A yayını almaz, çünkü yayın alıcı B'de sonlandırılır ve sonraki alıcılar bunu kabul edemez.
Aşağıdaki kodu değiştirin:
Alıcı B:
paket com.broadcast.receiver;
ithal android.content.BroadcastReceiver;
android.content.Context'i içe aktarın;
ithal android.content.Intent;
android.os.Bundle'ı içe aktarın;
android.util.Log'u içe aktar;
/ **
* Yayın alıcısı B
* @yazar weijiang204321
*
*/
genel sınıf SortBroadcastReceiverB, BroadcastReceiver'ı genişletir {
@Override
public void onReceive (Bağlam bağlamı, Amaç amacı) {
Log.e ("Demo:", "yayın alıcısı B");
Paket paketi = yeni Paket ();
bundle.putString ("sonraki_verici", "sonraki yayın alıcısı");
setResultExtras (paket);
}
için
}
B yayını aldıktan sonra, bir miktar değeri saklar ve bir sonraki alıcıya iletir.
Alıcının kodu:
paket com.broadcast.receive
Bizim diğer ürün:
Profesyonel FM Radyo İstasyonu Ekipman Paketi
|
||
|
Sürpriz almak için e-posta girin
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Arnavutça
ar.fmuser.org -> Arapça
hy.fmuser.org -> Ermeni
az.fmuser.org -> Azerice
eu.fmuser.org -> Bask Dili
be.fmuser.org -> Beyaz Rusça
bg.fmuser.org -> Bulgar
ca.fmuser.org -> Katalanca
zh-CN.fmuser.org -> Çince (Basitleştirilmiş)
zh-TW.fmuser.org -> Çince (Geleneksel)
hr.fmuser.org -> Hırvatça
cs.fmuser.org -> Çekçe
da.fmuser.org -> Danca
nl.fmuser.org -> Hollandalı
et.fmuser.org -> Estonca
tl.fmuser.org -> Filipinli
fi.fmuser.org -> Fince
fr.fmuser.org -> Fransızca
gl.fmuser.org -> Galiçyaca
ka.fmuser.org -> Gürcüce
de.fmuser.org -> Almanca
el.fmuser.org -> Yunanca
ht.fmuser.org -> Haiti Kreyolu
iw.fmuser.org -> İbranice
hi.fmuser.org -> Hintçe
hu.fmuser.org -> Macar
is.fmuser.org -> İzlandaca
id.fmuser.org -> Endonezya
ga.fmuser.org -> İrlandalı
it.fmuser.org -> İtalyan
ja.fmuser.org -> Japonca
ko.fmuser.org -> Korece
lv.fmuser.org -> Letonca
lt.fmuser.org -> Litvanya
mk.fmuser.org -> Makedonca
ms.fmuser.org -> Malayca
mt.fmuser.org -> Malta
no.fmuser.org -> Norveç
fa.fmuser.org -> Farsça
pl.fmuser.org -> Lehçe
pt.fmuser.org -> Portekizce
ro.fmuser.org -> Romen
ru.fmuser.org -> Rusça
sr.fmuser.org -> Sırpça
sk.fmuser.org -> Slovakça
sl.fmuser.org -> Slovence
es.fmuser.org -> İspanyolca
sw.fmuser.org -> Svahili
sv.fmuser.org -> İsveççe
th.fmuser.org -> Tay
tr.fmuser.org -> Türkçe
uk.fmuser.org -> Ukraynaca
ur.fmuser.org -> Urduca
vi.fmuser.org -> Vietnamca
cy.fmuser.org -> Galce
yi.fmuser.org -> Yidiş
FMUSER Kablosuz Video ve Sesi Daha Kolay İletin!
İletişim
Adres:
No.305 Oda HuiLan Binası No. 273 Huanpu Yolu Guangzhou Çin 510620
Kategoriler
Kaydolun