国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android接收和發送短信的實現代碼

2019-12-12 05:44:08
字體:
來源:轉載
供稿:網友

Android收到短信時會廣播android.provider.Telephony.SMS_RECEIVED消息,因此只要定義一個Receiver,收聽該消息,就能接收短信。

<receiver android:name=".smsReceiver" >   <intent-filter>     <action android:name="android.provider.Telephony.SMS_RECEIVED" />   </intent-filter> </receiver>

還可以為intent-filter加上一個優先級: 

<intent-filter android:priority="100">

這樣,由于優先級較高,應用將先于系統接收到android.provider.Telephony.SMS_RECEIVED消息。
Java文件: 

package com.hzhi.smsReceiver; import java.text.SimpleDateFormat;import java.util.Date; import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsMessage;import android.util.Log; public class smsReceiver extends BroadcastReceiver {   @Override  public void onReceive(Context context, Intent intent) {      // 短信內容   StringBuilder strBody = new StringBuilder();     // 短信時間   String strTime = new String();     // 短信發件人   StringBuilder number = new StringBuilder();   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    Bundle bundle = intent.getExtras();    if (bundle != null) {      Object[] _pdus = (Object[]) bundle.get("pdus");      SmsMessage[] message = new SmsMessage[_pdus.length];      for (int i = 0; i < _pdus.length; i++) {        message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);     }      for (SmsMessage currentMessage : message) {       strBody.append(currentMessage.getDisplayMessageBody());        number.append(currentMessage.getDisplayOriginatingAddress());        strTime = formatter.format(new Date(currentMessage.getTimestampMillis()));     }     String smsBody = strBody.toString();      String smsNumber = number.toString();      Log.v("NUMBER=", smsNumber);     Log.v("TIME=", strTime);      Log.v("BODY=", smsBody);      // 取消消息     this.abortBroadcast();    }  }   }

接收到消息后,通過Intent.getExtras()方法獲得Intent的Extras(Bundle變量),再使用Bundle.get("pdus")得到短信數組。為什么是短信數組呢?這是因為有些短信內容比較長,所以需要一個數組來存儲。對數組中的每一個元素,再分別取出短信內容、短信來源號碼、短信時間。其中,這些元素的短信來源號碼和短信時間都是一樣的,短信內容不一樣,需要拼接起來,構成一條完整的短信的內容。 

最后,this.abortBroadcast()取消android.provider.Telephony.SMS_RECEIVED消息。如果為intent-filter設置了較高的優先級,應用先于系統接收到android.provider.Telephony.SMS_RECEIVED消息,然后再將該消息丟棄,這樣,系統就不會收到android.provider.Telephony.SMS_RECEIVED消息,也不會發出短信的提示音、震動等。如果沒有設置優先級,系統將首先收到android.provider.Telephony.SMS_RECEIVED消息,發出短信的提示音、震動等,然后應用再收到短信。

// 發送短信public void sendMsg(){  String content = edtSend.getText().toString();  SmsManager smsManager = SmsManager.getDefault();  List<String> divideContents = smsManager.divideMessage(content);  for (String text : divideContents) {      smsManager.sendTextMessage(smsWidget.str_number, null, text, null, null);    }}

首先獲得一個SmsManager實例;再用divideMessage()方法將短信內容(content)劃分成幾個部分,這是因為如果短信內容太長,可能會超出允許發送的最大長度,這時就需要把短信內容劃分成幾個字符串,一般情況下,內容都不會超過最大長度,所以還是一個字符串;最后,對所有的字符串,使用sendTextMessage()方法發送,其中smsWidget.str_number是對方號碼,text是每一個字符串。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广汉市| 堆龙德庆县| 乌海市| 宜州市| 舟曲县| 卓资县| 锡林浩特市| 右玉县| 邢台县| 博客| 乐陵市| 阳新县| 民县| 酒泉市| 大兴区| 桑日县| 洛阳市| 岫岩| 湘阴县| 洮南市| 赫章县| 淳化县| 太仆寺旗| 武鸣县| 庄浪县| 类乌齐县| 花莲县| 台东县| 东兰县| 砀山县| 永康市| 上杭县| 肥东县| 赣榆县| 天镇县| 龙山县| 象州县| 鄂托克前旗| 济阳县| 榕江县| 邵阳县|