Android簡訊接收監聽、自動回覆簡訊操作例子

NO IMAGE

定義廣播接收器的Action:
複製程式碼 程式碼如下:
private static final String TAG =”SmsService”;
/**
* 資訊傳送狀態廣播
*/
private static final String ACTION_SMS_SEND  = “com.SmsService.send”; 
/**
* 資訊接收狀態廣播
*/
private static final String ACTION_SMS_DELIVERY = “com.SmsService.delivery”;
/**
* 資訊接收廣播
*/
private static final String ACTION_SMS_RECEIVER = “android.provider.Telephony.SMS_RECEIVED”;

 

定義並註冊廣播接收器,可以動態註冊,也可以靜態註冊:
複製程式碼 程式碼如下:
class SmsReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  int resultCode = getResultCode();
  if (intent.getAction().equals(ACTION_SMS_RECEIVER)){
   Log.i(TAG, “SmsReceiver->onReceive”);
   SmsMessage sms = null;
   Bundle bundle = intent.getExtras();//獲取intent中的內容 
   if (bundle != null) { 
    Object[] pdus = (Object[]) bundle.get(“pdus”);//獲取bundle裡面的內容 
    for (Object obj : pdus) { 
     //下面兩行將簡訊內容取出加入到message中 
     sms = SmsMessage.createFromPdu((byte[]) obj); 
    } 
   } 
   mHandler.obtainMessage(MSG_SMS_RECEIVE,sms).sendToTarget();
  //接收資訊傳送狀態
  }else if (intent.getAction().equals(ACTION_SMS_SEND)){
   switch (resultCode) {
    case Activity.RESULT_OK:
     Log.i(TAG, “簡訊傳送成功”);
     break;
    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
     Log.i(TAG, “簡訊傳送失敗:GENERIC_FAILURE”);
     break;
    case SmsManager.RESULT_ERROR_NO_SERVICE:
     Log.i(TAG, “簡訊傳送失敗:NO_SERVICE”);
     break;
    case SmsManager.RESULT_ERROR_NULL_PDU:
     Log.i(TAG, “簡訊傳送失敗:NULL_PDU”);
     break;
    case SmsManager.RESULT_ERROR_RADIO_OFF:
     Log.i(TAG, “簡訊傳送失敗:RADIO_OFF”);
     break;
   }
  //接收資訊接收狀態
  }else if (intent.getAction().equals(ACTION_SMS_DELIVERY)){
   switch (resultCode) {
    case Activity.RESULT_OK:
     Log.i(TAG, “簡訊接收成功”);
     break;
    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
     Log.i(TAG, “簡訊接收失敗:GENERIC_FAILURE”);
     break;
    case SmsManager.RESULT_ERROR_NO_SERVICE:
     Log.i(TAG, “簡訊接收失敗:NO_SERVICE”);
     break;
    case SmsManager.RESULT_ERROR_NULL_PDU:
     Log.i(TAG, “簡訊接收失敗:NULL_PDU”);
     break;
    case SmsManager.RESULT_ERROR_RADIO_OFF:
     Log.i(TAG, “簡訊接收失敗:RADIO_OFF”);
     break;
   }
  }
 }
}

 

這樣就實現了簡訊自動回覆功能,當然也可以實現接收到簡訊自動回撥電話。這裡提供一個簡訊接收函式:
複製程式碼 程式碼如下:
public void doReceiveSms(Intent intent) {
 Object[] pdus = (Object[]) intent.getExtras().get(“pdus”);
 SmsMessage [] messages = new SmsMessage[pdus.length];
 for(int i=0; i<pdus.length; i ){
  byte[]pdu = (byte[]) pdus[i];
  //從pud中建立一個訊息
  messages[i] = SmsMessage.createFromPdu(pdu);
 }
 for(SmsMessage msg: messages){
  //獲取簡訊的內容
  String content = msg.getMessageBody();
  //獲取傳送的人
  String sender = msg.getOriginatingAddress();
  //獲取簡訊的時間
  long timer = msg.getTimestampMillis(); 
  //將毫秒數字轉換成日期格式
  Date date = new Date(timer);
  SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-DD HH-MM-SS”);
  String time = sdf.format(date); 
  String smsContent = time “: ” sender “: ” content; 
  //呼叫傳送簡訊的方法
  sendSmsMessage(“5556”, smsContent);
 }
}

 

簡訊傳送:
複製程式碼 程式碼如下:
public void sendSmsMessage(String phoneNumber, String content){
 SmsManager smsManager = SmsManager.getDefault();
 //判斷簡訊內容的長度,如果長度大於70就會出錯,所以這步很重要
 if(content.length() >= 70){
  List<String> list = smsManager.divideMessage(content);
  for(String mMsg: list){
   smsManager.sendTextMessage(phoneNumber, null, mMsg, null, null);
  }
 }else{
  smsManager.sendTextMessage(phoneNumber, null, content, null, null);
 }
}

您可能感興趣的文章:

詳解Android簡訊的傳送和廣播接收實現簡訊的監聽Android實現雙模(CDMA/GSM)手機簡訊監聽的方法Android中監聽簡訊的兩種方法android簡訊監聽工具(示例程式碼)Android監聽手機簡訊的示例程式碼