android學習教程--廣播機制

 

android學習教程—廣播機制

一、知識概要

1、 註冊BroadcastReceiver的方法

2、 Android內置的BroadcastActions

二、知識詳解

         所謂廣播機制是指,當觸發一個事件時會做出相應的動作,比如說當別人發一條短信給你,然後BroadcastReceiver會監聽這個事件(Intent),並判斷用到了Intent中的Actiond的哪個BroadcastActions,如SMS_RECEIVED就是處理消息的,所以這個判斷就需要靠註冊BroadcastReceiver來實現。

1、註冊BroadcastReceiver的方法有兩種:

a、在AndroidManifest.xml中進行註冊

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="mars.testbc" android:versionCode="1" android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".TestActivity" android:label="@string/app_name">

            <intent-filter>

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

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <receiver android:name=".TestReceiver">

            <intent-filter>

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

            </intent-filter>

        </receiver>

    </application>

    <uses-sdk android:minSdkVersion="4" />

    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

</manifest>


b、在應用程序的代碼中進行註冊

           //生成一個BroadcastReceiver對象

           smsreceiver = new SMSReceiver();

           //生成一個IntentFilter對象

           IntentFilter intentFilter = new IntentFilter();

           //爲IntentFilter添加一個Action

           intentFilter.addAction(SMS_ACTION);

           //將BroadcastReceiver對象註冊到系統當中去

    Activity_broadcast.this.registerReceiver(smsreceiver, intentFilter);

2、Android內置的BroadcastActions

3、完整代碼

Activity_broadcast.java

package com.wyt.Activity_broadcast;

 

import android.app.Activity;

 

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

 

public class Activity_broadcast extends Activity {

    /** Called when the activity is first created. */

    private Button firstButton = null;

    private Button secondButton = 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);

       firstButton = (Button) findViewById(R.id.firstButton);

       secondButton = (Button) findViewById(R.id.secondButton);

 

       // 設置監聽器

       firstButton.setOnClickListener(new RegisterReceiverListener());

       secondButton.setOnClickListener(new UnregisterReceiverListener());

    }

    // 註冊

    class RegisterReceiverListener implements OnClickListener {

 

       public void onClick(View v) {

           // TODO Auto-generated method stub

           // 生成一個BroadcastReceiver對象

           smsreceiver = new SMSReceiver();

           // 生成一個IntentFilter對象

           IntentFilter intentFilter = new IntentFilter();

           // 爲IntentFilter添加一個Action

           intentFilter.addAction(SMS_ACTION);

           // 將BroadcastReceiver對象註冊到系統當中去

           Activity_broadcast.this.registerReceiver(smsreceiver, intentFilter);

 

       }

    }

    // 取消註冊

    class UnregisterReceiverListener implements OnClickListener {

 

       public void onClick(View v) {

           // TODO Auto-generated method stub

           Activity_broadcast.this.unregisterReceiver(smsreceiver);

       }

    }

}


SMSReceiver.java

package com.wyt.Activity_broadcast;

 

import android.content.BroadcastReceiver;

 

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.telephony.SmsMessage;

 

public class SMSReceiver extends BroadcastReceiver {

 

  @Override

  public void onReceive(Context context, Intent intent) {

       // TODO Auto-generated method stub

       System.out.println("receive msg");

 

       // 接受Intent對象當中的數據

       Bundle bundle = intent.getExtras();

       // 在Bundle對象當中有一個屬性名爲pdus,這個屬性的值是一個Object數組

       Object[] myPdus = (Object[]) bundle.get("pdus");

       // 創建一個SmsMessage類型的數組

       SmsMessage[] messages = new SmsMessage[myPdus.length];

       for (int i = 0; i < myPdus.length; i++) {

             // 使用object數組中的對象創建SmsMessage對象

             messages[i] = SmsMessage.createFromPdu((byte[]) myPdus[i]);

             // 調用SmsMessage對象的getDisppalyMessageBody()方法,就可以得到消息的內容

             System.out.println(messages[i].getDisplayMessageBody());

       }

  }

}


4、運行結果

單擊第一個按鈕“發送廣播機制”

然後再DDMS中發送消息到模擬器

然後模擬器會顯現你剛剛發送的消息,並在控制檯打印出來。

三、學習心得

       在學習這個知識的時候,我遇到了

,然後把之前做的列子看了一遍,終於發現,原來是AndroidManifest.xml沒有設置權限:<uses-permission android:name="android.permission.RECEIVE_SMS"/>,所以說由此可見,我們學習知識好比是在進行堆山的遊戲,越往上堆,下面的基地就越要牢固,我們學習也是一樣的,不要像猴子扳包穀那樣,學習了的知識一定要牢記,掌握,之前學習的知識在以後肯定是會用到的!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章