android開發之broadcast學習筆記

來源:互聯網
上載者:User

標籤:android   廣播   靜態註冊   動態註冊   

android中的廣播用的太多了,今天稍微總結一下。
按註冊方式分為兩種:

1.靜態註冊廣播:
靜態註冊廣播就是在androidManifest.xml檔案中註冊廣播,假設我們要實現這樣一個效果,在一個activity上點擊按鈕,發送一條廣播,這條廣播彈出一個toast,顯示“靜態”二字。

先看看廣播接受者:

public class MyBroadcast extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"靜態", Toast.LENGTH_LONG).show();    }}

資訊清單檔中註冊:

        <receiver android:name="com.example.staticbroadcast.MyBroadcast" >            <intent-filter>                <action android:name="com.test.StaticBroadcast" />            </intent-filter>        </receiver>

activity中的點擊事件(發送廣播):

        this.static_btn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent();                intent.setAction("com.test.StaticBroadcast");                sendBroadcast(intent);            }        });

2.動態註冊。
動態註冊一般是在activity中的onStart()方法中註冊,在onStop()方法中解除註冊,代碼如下:

public class MainActivity extends Activity {    private Button static_btn;    private Button dynamic_btn;    private BroadcastReceiver myBroadcastReceiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        this.static_btn = (Button) this.findViewById(R.id.button1);        this.dynamic_btn = (Button) this.findViewById(R.id.Button01);        myBroadcastReceiver = new BroadcastReceiver(){            @Override            public void onReceive(Context context, Intent intent) {                Toast.makeText(MainActivity.this,"你好,這裡是動態廣播!", Toast.LENGTH_LONG).show();            }        };//      this.static_btn.setOnClickListener(new OnClickListener() {////          @Override//          public void onClick(View v) {//              Intent intent = new Intent();//              intent.setAction("com.test.StaticBroadcast");//              sendBroadcast(intent);//          }//      });        this.dynamic_btn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                //發送廣播                Intent intent = new Intent();                intent.setAction("DynamicBroadcast");                sendBroadcast(intent);            }        });    }    @Override    protected void onStart() {        super.onStart();        //註冊廣播        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("DynamicBroadcast");        registerReceiver(myBroadcastReceiver, intentFilter);    }    @Override    protected void onStop() {        super.onStop();        //取消註冊        unregisterReceiver(myBroadcastReceiver);    }}

關於靜態註冊的細節:
android:exported=”true”這個屬性工作表示該廣播接收器是否接收來自其他App發出的廣播,如果有intent-filter屬性,則預設為true,否則預設為false。

每個廣播接收者都可以接受多個廣播源,如果是靜態註冊,那麼你要這麼做:

        <receiver             android:exported="true"            android:name="com.example.staticbroadcast.MyBroadcast" >            <intent-filter>                <action android:name="com.test.StaticBroadcast" />                <action android:name="com.test.StaticBroadcast2"/>            </intent-filter>        </receiver>

在廣播接收器中這樣處理:

    @Override    public void onReceive(Context context, Intent intent) {        if (intent.getAction().equals("com.test.StaticBroadcast")) {            Toast.makeText(context, "靜態", Toast.LENGTH_SHORT).show();        } else if (intent.getAction().equals("com.test.StaticBroadcast2")) {            Toast.makeText(context, "靜態2", Toast.LENGTH_SHORT).show();        }    }

如果是動態註冊,註冊方式如下:

    @Override    protected void onStart() {        super.onStart();        //註冊廣播        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("DynamicBroadcast");        intentFilter.addAction("DynamicBroadcast2");        registerReceiver(myBroadcastReceiver, intentFilter);    }

廣播接收器中的處理方式與靜態註冊一致。

關於怎樣使用broadcast實現activity和fragment之間的通訊可以查看我的另一篇部落格使用Broadcast實現android組件之間的通訊

本文參考了:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。

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.