亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android中的廣播(BroadCast)詳細(xì)介紹

 更新時(shí)間:2015年03月28日 12:11:38   投稿:junjie  
這篇文章主要介紹了Android中的廣播(BroadCast)詳細(xì)介紹,本文講解了什么是廣播、廣播有什么用、實(shí)現(xiàn)廣播、動(dòng)態(tài)注冊(cè)方式、配置文件方式等內(nèi)容,需要的朋友可以參考下

什么是廣播

在Android中,Broadcast是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制。我們拿廣播電臺(tái)來做個(gè)比方。我們平常使用收音機(jī)收音是這樣的:許許多多不同的廣播電臺(tái)通過特定的頻率來發(fā)送他們的內(nèi)容,而我們用戶只需要將頻率調(diào)成和廣播電臺(tái)的一樣就可以收聽他們的內(nèi)容了。Android中的廣播機(jī)制就和這個(gè)差不多的道理。

電臺(tái)發(fā)送的內(nèi)容是語音,而在Android中我們要發(fā)送的廣播內(nèi)容是一個(gè)Intent。這個(gè)Intent中可以攜帶我們要傳送的數(shù)據(jù)。

電臺(tái)通過大功率的發(fā)射器發(fā)送內(nèi)容,而在Android中則是通過sendBroadcast這個(gè)方法來發(fā)送(很形象的名字吧)。      

用戶通過調(diào)整到具體的電臺(tái)頻率接受電臺(tái)的內(nèi)容。而在Android中要接受廣播中的內(nèi)容則是通過注冊(cè)一個(gè)BroadCastReceiver來接收的。只有發(fā)送廣播的action和接收廣播的action相同,接受者才能接受這個(gè)廣播。

廣播有什么用

其實(shí),在什么是廣播的第一句就已經(jīng)說明了廣播有什么用了。對(duì)了,籠統(tǒng)一點(diǎn)講就是用來傳輸數(shù)據(jù)的。具體一點(diǎn)說就是:     1.實(shí)現(xiàn)了不同的程序之間的數(shù)據(jù)傳輸與共享,因?yàn)橹灰呛桶l(fā)送廣播的action相同的接受者都能接受這個(gè)廣播。典型的應(yīng)用就是android自帶的短信,電話等等廣播,只要我們實(shí)現(xiàn)了他們的action的廣播,那么我們就能接收他們的數(shù)據(jù)了,以便做出一些處理。比如說攔截系統(tǒng)短信,攔截騷擾電話等等 2.起到了一個(gè)通知的作用,比如在service中要通知主程序,更新主程序的UI等。因?yàn)閟ervice是沒有界面的,所以不能直接獲得主程序中的控件,這樣我們就只能在主程序中實(shí)現(xiàn)一個(gè)廣播接受者專門用來接受service發(fā)過來的數(shù)據(jù)和通知了。

實(shí)現(xiàn)廣播

現(xiàn)在我們就來實(shí)現(xiàn)一個(gè)簡單的廣播程序。Android提供了兩種注冊(cè)廣播接受者的形式,分別是在程序中動(dòng)態(tài)注冊(cè)和在xml中指定。他們之間的區(qū)別就是作用的范圍不同,程序動(dòng)態(tài)注冊(cè)的接收者只在程序運(yùn)行過程中有效,而在xml注冊(cè)的接收者不管你的程序有沒有啟動(dòng)有會(huì)起作用。首先介紹在程序中動(dòng)態(tài)注冊(cè)的方式。

動(dòng)態(tài)注冊(cè)方式

我們?cè)诔绦蛑性O(shè)置了三個(gè)按鈕,分別是“注冊(cè)廣播”,“取消注冊(cè)”和“發(fā)送廣播”。然后每個(gè)按鈕設(shè)置點(diǎn)擊事件來完成廣播的演示。

最簡單的項(xiàng)目的建立過程和按鈕事件的建立我再這里就不羅嗦了,不會(huì)的可以下載下面的DEMO源碼查看。直接看三個(gè)按鈕的實(shí)現(xiàn)方式。

首先是注冊(cè)廣播的按鈕事件代碼:

復(fù)制代碼 代碼如下:

private ReceiveBroadCast receiveBroadCast;  //廣播實(shí)例
 
public class RegisteLinster implements OnClickListener
{
        @Override
        public void onClick(View view)
        {
            // 注冊(cè)廣播接收
            receiveBroadCast = new ReceiveBroadCast();
            IntentFilter filter = new IntentFilter();
            filter.addAction(flag);    //只有持有相同的action的接受者才能接收此廣播
            registerReceiver(receiveBroadCast, filter);
        }
}
 
public class ReceiveBroadCast extends BroadcastReceiver
{
 
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //得到廣播中得到的數(shù)據(jù),并顯示出來
            String message = intent.getStringExtra("data");
            txtShow.setText(message);
        }
 
}

首先我們實(shí)現(xiàn)了一個(gè)ReceiveBroadCast 類,它繼承了BroadcastReceiver并實(shí)現(xiàn)了其中的onReceive方法,這樣當(dāng)這個(gè)廣播被接收的時(shí)候就會(huì)執(zhí)行這個(gè)方法。注意我們?cè)谧?cè)廣播的時(shí)候使用了filter.addAction方法添加了一個(gè)過濾器。如果沒有這一句,就相當(dāng)于廣播電臺(tái)沒有告訴咱們收音機(jī)用戶接收的頻率,就不好收聽這個(gè)廣播了。

再來看看如何取消注冊(cè),是的程序不再接收這個(gè)類型的廣播了。

復(fù)制代碼 代碼如下:

public class UnregisteLinster implements OnClickListener
{
 
        @Override
        public void onClick(View arg0)
        {
            unregisterReceiver(receiveBroadCast);
        }
}

怎么樣?是不是超級(jí)簡單的啊,就是將我們上面的那個(gè)廣播類的實(shí)例傳進(jìn)去就行了?,F(xiàn)在注冊(cè),取消注冊(cè)都好了,就剩下如何發(fā)送了。看代碼:

復(fù)制代碼 代碼如下:

public class SendBroadCastListener implements OnClickListener
{
        @Override
        public void onClick(View arg0)
        {
            Intent intent = new Intent();  //Itent就是我們要發(fā)送的內(nèi)容
            intent.putExtra("data", "this is data from broadcast "+Calendar.getInstance().get(Calendar.SECOND)); 
            intent.setAction(flag);   //設(shè)置你這個(gè)廣播的action,只有和這個(gè)action一樣的接受者才能接受者才能接收廣播
            sendBroadcast(intent);   //發(fā)送廣播
        }
}

每一句都注釋了的,就不要我再講了吧。一看就明白了?,F(xiàn)在,運(yùn)行程序看看效果吧。先注冊(cè)一下,然后每發(fā)送一次廣播上面的文字就會(huì)變化一次,表明已經(jīng)接收到了廣播了。按取消注冊(cè)后你可以發(fā)現(xiàn)再按發(fā)送按鈕已經(jīng)接收不到廣播了。

配置文件方式

配置和動(dòng)態(tài)注冊(cè)的區(qū)別在上面已經(jīng)說了,這種方式適合你的程序需要長期的監(jiān)測(cè)某個(gè)廣播的情形,比如監(jiān)測(cè)用戶的短信。注冊(cè)方式比較簡單,相當(dāng)于上面的代碼只要接收的那部分就行了。不過要注意的是通過配置文件這種方式注冊(cè)廣播需要在單獨(dú)的一個(gè)類中繼承BroadReceiver,內(nèi)部類是沒有用的。所以我們新建了一個(gè)broadCastReceiveByXml類并繼承了BroadReceive。代碼如下:

復(fù)制代碼 代碼如下:

public class broadCastReceiveByXml extends BroadcastReceiver
{
 
    @Override
    public void onReceive(Context arg0, Intent arg1)
    {
        Log.d("qlf", "broadcast receive by xml");    //因?yàn)椴辉谥鱑I下,不好使用控件,所以我們這里打印到LOG里面查看效果
    }
 
}

然后在AndroidManifest中的<activity></activity>節(jié)點(diǎn)之后我們添加一下代碼:

復(fù)制代碼 代碼如下:

<receiver android:name="com.qlf.broadCast.broadCastReceiveByXml">
    <intent-filter>
        <action android:name="com.qlf.broadCastFlag">
        </action>
    </intent-filter>
</receiver>

receiver中的android:name就是我們?cè)诔绦蛑械哪莻€(gè)接收廣播的類。下面的intent-filter和我們講到的功能類似,而這個(gè)action就是上面的那個(gè)flag啦?,F(xiàn)在我們運(yùn)行程序,發(fā)現(xiàn)同樣可以實(shí)現(xiàn)上面的功能。運(yùn)行的結(jié)果如下:

除了使用我們自己發(fā)送廣播,android也內(nèi)置了許多廣播。比如我們上面提到的來了消息的時(shí)候android會(huì)發(fā)送一個(gè)action名為“android.provider.Telephony.SMS_RECEIVED”的廣播,這個(gè)時(shí)候如果我們想要接受這個(gè)廣播只要將配置文件中的那個(gè)action設(shè)置為上面這個(gè)字符串就能接收到消息信息了。android包括了許多其他的廣播action,有興趣的同學(xué)到網(wǎng)上搜搜就有了。這里就不再舉例了。

相關(guān)文章

最新評(píng)論