歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android--常駐BroadReceiver實現短信提醒

首先,由於BroadReceiver是Android組件之一,所以需要先聲明才能使用,聲明的方法如下:

  <!-- 建立receiver聆聽系統廣播訊息 -->
    <receiver android:name="EX06_01_SMSreceiver">
    <!-- 設定要捕捉的訊息名稱為provider中Telephony.SMS_RECEIVED -->
  <intent-filter>
    <action
      android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
    </receiver>

接著,我們看下實現本實例的截圖:

1.程序開始運行時

2.當程序收到短信的時候

下面給出實現本實例的代碼:

1.繼承自BroadReceiver的類對象

//這個類實現的是處理操作系統的事件,它處於一直監聽的狀態,知道操作系統有事件發生時才會有所響應
/* 自定義繼承自BroadcastReceiver類,監聽系統服務廣播的信息 */
public class EX06_01_SMSreceiver extends BroadcastReceiver
{
  /*聲明靜態字符串,並使用android.provider.Telephony.SMS_RECEIVED作為Action為短信的依據*/
  private static final String mACTION = "android.provider.Telephony.SMS_RECEIVED";
 
  /*
  * 實現廣播的監聽反應必須要重載的函數
  * 這個函數有一個重要的參數Intent,它是系統或用戶發送的Intent變量
  * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
  */
  @Override
  public void onReceive(Context context, Intent intent)
  {
    // TODO Auto-generated method stub
    /* 判斷傳來Intent是否為短信
    * 需要在過濾器中設置
    * */
    if (intent.getAction().equals(mACTION))
    {
      /*建構一字符串集集合變量sb*/
      StringBuilder sb = new StringBuilder();
      /*接收由Intent傳來的數據*/
      Bundle bundle = intent.getExtras();
      /*判斷Intent是有資料*/
      if (bundle != null)
      {
        Set<String> keysSet=bundle.keySet();
        for(String keyString:keysSet){
          Log.d("key", keyString);
        }
        /* pdus為 android內建短信參數 identifier
        * 透過bundle.get("")並傳一個包含pdus的對象*/
        Object[] myOBJpdus = (Object[]) bundle.get("pdus");
        /*建構短信對象array,並依據收到的對象長度來建立array的大小*/
        SmsMessage[] messages = new SmsMessage[myOBJpdus.length]; 
        for (int i = 0; i<myOBJpdus.length; i++)
        { 
          messages[i] = SmsMessage.createFromPdu ((byte[]) myOBJpdus[i]); 
        }
         
        /* 將送來的短信合並自定義信息於StringBuilder當中 */ 
        for (SmsMessage currentMessage : messages)
        { 
          sb.append("接收到來告:\n"); 
          /* 來訊者的電話號碼 */
          sb.append(currentMessage.getDisplayOriginatingAddress()); 
          sb.append("\n------傳來的短信------\n"); 
          /* 取得傳來訊息的BODY */ 
          sb.append(currentMessage.getDisplayMessageBody()); 
        } 
      }   
      /* 北Notification(Toase)顯示短信信息  */
      Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
     
      /* 返並加Activity */
      Intent i = new Intent(context, EX06_01.class);
      Bundle bundle2=new Bundle();
      bundle2.putString("SMS", sb.toString());
      i.putExtra("SMSS", bundle2);
      /*設定讓加Activity以一個新的task來執行*/
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(i);
    }
  }
}

說明:由於BroadReceiver不是一旦單獨的進程,且不是一個單獨的線程,所以可以對UI界面進行更新。

Copyright © Linux教程網 All Rights Reserved