Android 之 BroadcaseReceiver

來源:互聯網
上載者:User

標籤:android   style   blog   class   code   java   

1.在AndroidManifest.xml中註冊

<receiver android:name=".MyReceiver">            <intent-filter >                <action android:name="myaction"/>            </intent-filter>        </receiver>

 

2.在Activity中註冊

MyReceiver receiver = new MyReceiver();IntentFilter filter = new IntentFilter();filter.addAction("myaction");registerReceiver(receiver, filter);

 

兩種註冊BroadcastReceiver方法的比較:
現在我們瞭解了兩種註冊BroadcastReceiver的方法之後,需要考慮一下這兩種方法適用的場合:

    i. 第一種註冊的方法可以保證在應用程式安裝之後,BroadcastReceiver始終處於活動狀態,通常用於監聽系統狀態的改變,比如說手機的電量,wifi網卡的狀態(當然,監視這些東西也是取決於軟體的需求)。對於這樣的BroadcastReceiver,通常是在產生某個特定的系統事件之後,進行相應的操作,比如說wifi網卡開啟時,給使用者一個提示;

    ii. 第二種註冊方法相對第一種要靈活的多,這樣註冊的BroadcastReceiver通常用於更新UI的狀態。一般來說,都是在一個Activity啟動的時候使用這樣的方法註冊BroadcastReceiver,一旦接收到廣播的事件,就可以在onReceive方法當中更新當前的這個Activity當中的控制項。但是需要注意的是如果這個Activity不可見了,就應該調用unregisterReceiver方法來解除註冊;

 

函數:

i. registerReceiver(receiver,filter);
這個函數的作用就是將一個BroadcastReceiver註冊到應用程式當中,這個函數接收兩個參數,第一個參數是需要註冊的BroadcastReceiver對象,第二個是一個IntentFilter。第一個參數是非常容易理解的,第二個參數的作用是定義了哪些Intent才能觸發這個註冊的BroadcastReceiver對象。類似於前面所講解的
<intent-filter>標籤的作用;

ii. unregisterReceiver(receiver);
這個方法就非常的簡單了,用於解除BroadcastReceiver的綁定狀態。一旦解除完成,響應的BroadcastReceiver就不會再接收系統所廣播的Intent了。

 

下面是原始碼Demo:

Acitivity:

package com.example.broadcast;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {        Button mybt;    Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mybt = (Button)findViewById(R.id.mybt);        mybt.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                // TODO Auto-generated method stub                                /*註冊BroadcastReceiver有兩種方式:                一種方式是,靜態在AndroidManifest.xml中用<receiver>標籤生命註冊,並在標籤內用<intent- filter>標籤設定過濾器。                另一種方式是,動態在代碼中先定義並設定好一個 IntentFilter 對象,然後在需要註冊的地方調Context.registerReceiver()方法,                如果取消時就調用 Context.unregisterReceiver()方法。如果用動態方式註冊的BroadcastReceiver的Context對象被銷毀時,                BroadcastReceiver也就自動取消註冊了。(特別注意,有些可能需要後台監聽的,如簡訊訊息)*///                MyReceiver receiver = new MyReceiver();//                IntentFilter filter = new IntentFilter();//                filter.addAction("myaction");//                registerReceiver(receiver, filter);                //建立Intent對象                intent = new Intent();                //設定Intent的Action屬性                intent.setAction("myaction");                //加入資訊                intent.putExtra("msg", "普通廣播");                //傳送資訊                sendBroadcast(intent);                                            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }}

 

BroadcastReceiver:

package com.example.broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class MyReceiver extends BroadcastReceiver{    @Override    public void onReceive(Context context, Intent intent) {        // TODO Auto-generated method stub        Toast.makeText(context,"Action is:"+intent.getAction()                +"\n msg is:"+intent.getStringExtra("msg") , Toast.LENGTH_LONG)                .show();    }}

 

Service發送廣播:

Intent intent = new Intent();  intent.setAction("com.he.chat.receiveNewMessage");//建立過濾條件  intent.putExtra("key", "newMessage");//傳遞參數  intent.putExtra("sender", msg.getSender());//傳遞參數  sendBroadcast(intent);

 

 

Manifest:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.broadcast"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <receiver android:name=".MyReceiver">            <intent-filter >                <action android:name="myaction"/>            </intent-filter>        </receiver>        <activity            android:name="com.example.broadcast.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.