Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android--常駐BroadReceiver實現短信提醒

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

編輯:關於Android編程

   首先,由於BroadReceiver是Android組件之一,所以需要先聲明才能使用,聲明的方法如下: [html]    <!-- 建立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的類對象 [java]  //這個類實現的是處理操作系統的事件,它處於一直監聽的狀態,知道操作系統有事件發生時才會有所響應   /* 自定義繼承自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界面進行更新。 2.主程序代碼: [java]   public class EX06_01 extends Activity    {      private TextView mTextView1;      private TextView textView;     /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState)      {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        /*透過findViewById建構巳建立TextView對象*/        textView=(TextView)findViewById(R.id.myTextView2);       mTextView1 = (TextView) findViewById(R.id.myTextView1);        mTextView1.setText("等待接收短信...");            Bundle bundle=getIntent().getBundleExtra("SMSS");       //初始時並沒有短信的內容(因為沒有發送),若沒有判斷會造成空指針異常       if(bundle!=null){       String smsString=bundle.getString("SMS");       textView.setText(smsString);        }          }   }     3.AndroidManifest.xml [html]   <?xml version="1.0" encoding="utf-8"?>   <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="irdc.EX06_01"     android:versionCode="1"     android:versionName="1.0.0">       <application android:icon="@drawable/icon" android:label="@string/app_name">       <activity android:name=".EX06_01"         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聆聽系統廣播訊息 -->       <receiver android:name="EX06_01_SMSreceiver">        <!-- 設定要捕捉的訊息名稱為provider中Telephony.SMS_RECEIVED -->     <intent-filter>        <action          android:name="android.provider.Telephony.SMS_RECEIVED" />      </intent-filter>        </receiver>      </application>   <uses-sdk android:minSdkVersion="7" />   <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>   </manifest>   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved