Android的簡訊接收處理—-Broadcast和Receiver的使用

來源:互聯網
上載者:User

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.mysrc"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".ActivityMain1"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity android:name="SecondActivity" />       <receiver android:name=".MyBroadcastReceiver">           <intent-filter>              <!--   <action android:name="android.intent.action.BOOT_COMPLETED" />  Android系統開機啟動 -->             <action android:name="android.provider.Telephony.SMS_RECEIVED" />          </intent-filter>        </receiver>    </application>         <!--    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 擷取系統開機啟動的許可權 -->     <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <!-- 程式接收簡訊許可權 -->    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>  <!-- 讀簡訊許可權 -->    </manifest> 

Android系統在進行某些動作或者狀態改變時都會向全系統廣播特定的Broadcast,如果某個程式包含有接收與這個Broadcast匹配的Receiver,就能通過這個Broadcast觸發自訂的處理。

現通過簡訊的接收為例,敘述一下Broadcast和Receiver的使用。

Receiver類代碼如下:

import ............;public class MyBroadcastReceiver extends BroadcastReceiver { //static final String ACTION = "android.intent.action.BOOT_COMPLETED";      系統開機啟動的Broadcast標識 static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";    系統接收到簡訊的Broadcast標識 @Override public void onReceive(Context context, Intent intent) {   if (intent.getAction().equals(ACTION)){ //啟動服務           Bundle bundle = intent.getExtras();       Object messages[] = (Object[]) bundle.get("pdus");       SmsMessage smsMessage[] = new SmsMessage[messages.length];       for (int n = 0; n <messages.length; n++) {//一次可能接收到多條簡訊????               smsMessage[n]=SmsMessage.createFromPdu((byte[]) messages[n]);               String sender = smsMessage[n].getOriginatingAddress();// 擷取簡訊的寄件者               String content = smsMessage[n].getMessageBody();// 擷取簡訊的內容               Date date = new Date(smsMessage[n].getTimestampMillis());//擷取簡訊的接收時間               SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");               String sendtime = format.format(date);                  //    Toast.makeText(context, "發送人:"+sender+"\r\n#發送時間:"+sendtime+              //                    "\r\n#內容:"+content, Toast.LENGTH_LONG).show();              Intent myIntent=new Intent(context,SecondActivity.class);                      myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //這樣啟動一個Activity一定要把Intent打上         
             //FLAG_ACTIVITY_NEW_TASK 的標誌,不然會報錯
             context.startActivity(myIntent);             //    SmsManager manager = SmsManager.getDefault();            //    manager.sendTextMessage("5556", null, "發送人:" + sender            //      + "-----發送時間:" + sendtime + "----內容:" + content, null,null); // 把攔截到的簡訊發送到你指定的手機,此處為5556                      }     } }}

Android程式的各種許可權及說明參加地址:http://yangguangfu.javaeye.com/blog/753388

Android系統的各種Broadcast標識參見地址:http://hi.baidu.com/pengwenfu/blog/item/3e1f5d2ba7dc0723d52af118.html

AndroidManifest.xml代碼如下(註冊Receiver和給程式賦予許可權):


相關文章

聯繫我們

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