[Android學習]Android廣播機制

來源:互聯網
上載者:User

Android廣播機制簡介:

在Android中,有一些操作完成以後,會發送廣播,比如說發出一條簡訊或者打出一個電話,如果某個程式接收了這條廣播,就會做相應的處理。而且該廣播可以被不止一個應用程式所接收,當然也可以不被任何程式所接收。

廣播機制最大的特點就是發送方並不關心接收方是否接收資料,也不關心接收方如何處理資料。

對於該廣播是否被一個應用程式所接收,取決於這個應用程式是否註冊BroadcastReceiver,因為roadcastReceiver用於監聽被廣播的事件(intent),為了達到這個目的,BroadcastReceiver必須被註冊,註冊的方法有以下兩種:

1、靜態註冊方法

在AndroidManifest.xml的application裡面定義receiver並設定要接收的action

其特點為:不管該應用程式是否處於活動狀態,都會進行監聽。

也就是說,這個程式無論是否開啟,都會接收廣播,並作出相應處理。如果一個程式接收是手機電量低的提醒,那麼這個機制就很適合,因為不用顧忌這個程式是否關閉或者開啟,都能得到手機電量低的提醒。但是,如果是接收某個廣播來對該程式的Activity首頁面的改變,那麼這種機制就沒有必要,因為當程式關閉時,我們不會關心這個程式頁面的變化,而造成電量以及手機效能的影響。

2、在應用程式中註冊

如果想避免上一種後果,那麼就可以在應用程式中註冊BroadcastReceiver。這樣可以很方便的註冊和取消註冊,從而決定對廣播是否接受。

下面是靜態註冊的執行個體:

廣播發送:

 

package com.ye_yun_lin.broadcastreceiver;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent();intent.setAction(intent.ACTION_EDIT);MainActivity.this.sendBroadcast(intent);}});}}

廣播接收:

 

 

 

package com.ye_yun_lin.broadcastreceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class Receiver extends BroadcastReceiver {public Receiver(){System.out.println("--Receiver");}@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("--onReceiver");}}

BroadcastReceiver註冊:

 

 

 

                                                        

輸出結果:

 

 

 

下面是在應用程式中註冊的執行個體:

 

public class SMSReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.out.println("receive message");//接受Intent對象當中的資料Bundle bundle = intent.getExtras();//在Bundle對象當中有一個屬性名稱為pdus,這個屬性的值是一個Object數組Object[] myOBJpdus = (Object[]) bundle.get("pdus"); //建立一個SmsMessage類型的數組        SmsMessage[] messages = new SmsMessage[myOBJpdus.length];          System.out.println(messages.length);        for (int i = 0; i
public class TestBC2Activity extends Activity {    /** Called when the activity is first created. */private Button registerButton = null;private Button unregisterButton = null;private SMSReceiver smsReceiver = null;private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        registerButton = (Button)findViewById(R.id.register);        registerButton.setOnClickListener(new RegisterReceiverListener());        unregisterButton = (Button)findViewById(R.id.unregister);        unregisterButton.setOnClickListener(new UnRegisterReceiverListener());    }        class RegisterReceiverListener implements OnClickListener{@Overridepublic void onClick(View v) {//產生一個BroiadcastReceiver對象smsReceiver = new SMSReceiver();//產生一個IntentFilter對象IntentFilter filter = new IntentFilter();//為IntentFilter添加一個Actionfilter.addAction(SMS_ACTION);//將BroadcastReceiver對象註冊到系統當中TestBC2Activity.this.registerReceiver(smsReceiver, filter);}        }        class UnRegisterReceiverListener implements OnClickListener{@Overridepublic void onClick(View v) {//解除BroadcastReceiver對象的註冊TestBC2Activity.this.unregisterReceiver(smsReceiver);}        }}


 

 

 

聯繫我們

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