<?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和給程式賦予許可權):