Android組件之BroadCast簡單實踐

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   ar   os   java   sp   

作為Android的四大組件之一,沒有理由不介紹一下BroadCast,BroadCast中文簡單翻譯就是廣播,前陣子浙江某大學的啦啦操,廣場舞的大媽,其中大媽和學生從喇叭和音響上聽到的聲音就是事件來源,接收者就是這些大媽和學生,程式源自實踐,Android中BroadCast,有事件廣播者也有事件接收者,Broadcast是一種廣泛運用的在應用程式之間傳輸資訊的機制,BroadcastReceiver是對發送出來的 Broadcast進行過濾接受並響應的一類組件,也就是接收者。講完了基本的概念,可以開始基本的實踐:

自訂廣播的兩種實現方式

兩種實現方式,一種是靜態,一種是動態,先看下靜態實現過程:

定義一個BookBroadCast接收者(有幾個判斷添加是系統廣播需要的):

public class BookBroadCast extends BroadcastReceiver {private String tag = "BookBroadCast";@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString actionString = intent.getAction();String name = intent.getStringExtra("Name");if (actionString.equals(Intent.ACTION_TIME_CHANGED)) {Log.i(tag, "Name:" + name + "--Action:" + actionString+ "--哥們,時間改變了~");} else if (actionString.equals(Intent.ACTION_BATTERY_CHANGED)) {Log.i(tag, "Name:" + name + "--Action:" + actionString+ "--哥們,電量變了~");} else {Log.i(tag, "Name:" + name + "--Action:" + actionString);}}}

  看下App頁面:

 

 

靜態廣播對應第一個按鈕,點擊事件:

Intent intent = new Intent("com.google.broadcast.BookBroadCast.static");intent.putExtra("Name", "靜態廣播");sendBroadcast(intent);

  靜態廣播需要在AndroidManifest.xml中註冊一下:

   <receiver android:name="com.google.broadcast.BookBroadCast">            <intent-filter >                <action android:name="com.google.broadcast.BookBroadCast.static"/>                   <action android:name="android.intent.action.TIME_SET"/>            </intent-filter>        </receiver>    

  結果如下:

動態調用就是不需要在AndroidManifest.xml註冊,在程式中動態產生filter設定action,在activity中的onStart註冊,onStop終止:

@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();unregisterReceiver(bookReceiver);}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("com.google.broadcast.BookBroadCast.dymanic");bookReceiver = new BookBroadCast();registerReceiver(bookReceiver, intentFilter);}

  動態呼叫事件,對應第二個按鈕:

Intent dintent = new Intent("com.google.broadcast.BookBroadCast.dymanic");dintent.putExtra("Name", "動態廣播");sendBroadcast(dintent);

  結果如下:

兩種系統廣播調用方式

關於系統廣播的各種事件網上一找一堆,我就沒必要貼在這裡了,先來實現第三個和第四個按鈕的事件,第三個是系統事件的改變,第四個是電池電量的改變:

第三個action的常量的和Intent枚舉出來的名稱有出入:

    <action android:name="android.intent.action.TIME_SET"/>

  調用的時候是這樣的:

Intent sintent = new Intent(Intent.ACTION_TIME_CHANGED);sintent.putExtra("Name", "不被保護系統廣播");sendBroadcast(sintent);

  結果如下:

這個其實都沒有什麼大的問題,然後按照靜態註冊方式沒法搞定第四個電池電量的問題,先來看第四個是如何?的:

IntentFilter systemintentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);systembookReceiver = new BookBroadCast();registerReceiver(systembookReceiver, systemintentFilter);

 首先可以看出不是靜態註冊的,需要動態註冊,然後不需要調用sendBroadcast,結果如下:

這個問題解決都高了一個多小時,最終的Google的API找到對應的解釋:

地址:http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK

遇到問題發現Google才是最可靠的,也搜了不少中文文章,就不信沒人遇到坑,哎,周六看部落格的都是愛學習的孩子,周末愉快~

Android組件之BroadCast簡單實踐

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.