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

首頁 > 系統 > Android > 正文

Android中BroadcastReceiver實現短信關鍵字自動回復功能

2019-10-22 18:10:02
字體:
來源:轉載
供稿:網友

前言:因公司業務需要,需要一臺手機專門回復客戶訂購的套餐的短信,之前一直是人工手動回復,但比較麻煩且回復可能不及時,于是項目經理就讓實現根據短信的關鍵字自動回復功能。

實現手機短信監聽的方式有兩種:一是通過ContentObserver觀察者實現監聽,另一種就是通過廣播即BroadcastReceiver實現短信監聽,文章中通過使用BroadcastReceiver實現有新短信的及時監聽及包含設定的關鍵字時自動回復.

效果圖:

Android,BroadcastReceiver,短信,自動回復

清單文件添加權限:

<uses-permission android:name="android.permission.SEND_SMS" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.WRITE_SMS" />

1.自定義SmsBroadcastReceiver

(1)自定義SmsBroadcastReceiver繼承自BroadcastReceiver,并重寫OnReceive方法

mContext = context;//獲取短信的bundleBundle bundle = intent.getExtras();//短信對象SmsMessage msg;if (null != bundle) { //獲取pdu編碼的短信數組(接受的短信都是以pdu編碼的16進制數組) Object[] smsObj = (Object[]) bundle.get("pdus"); for (Object object : smsObj) {  //將pdu編碼的短信解析為SmsMessage對象  msg = SmsMessage.createFromPdu((byte[]) object);  //獲取短信內容  String msgBody = msg.getDisplayMessageBody();  //獲取發送短信的號碼  String number = msg.getOriginatingAddress();  //獲取短信時間戳  long time = msg.getTimestampMillis();  //獲取我們在主頁面設置的要回復短信的關鍵字及短信內容的bean  List<SmSBean> smsList = ShareUtil.getInstance(context).getSMS();  for (SmSBean bean : smsList) {   //判斷短信內容是否包含設置的關鍵字   if (!TextUtils.isEmpty(msgBody) && msgBody.contains(bean.key)) {    //如果包含,則自動發送短信    AutoSendSms(bean.content, context, number, time, msgBody);    break;   }  } }}

(2)定義自動發送短信的方法AutoSendSms

/** * 發送短信的方法 * @param msg 發送的短信內容 * @param context 上下文對象 * @param number 接受短信的號碼 * @param time 時間戳 * @param msgBody 接受到的短信 */private void AutoSendSms(String msg, Context context, String number, long time, String msgBody) { //獲取短信管理器 SmsManager SM = SmsManager.getDefault(); //通過反射獲取短信管理類 Class SMClass = SmsManager.class; //通過反射查到了SmsManager有個叫做mSubId的屬性 // 創建發送短信意圖 Intent sentIntent = new Intent(SENT_SMS_ACTION); Field field = null; try {  field = SMClass.getDeclaredField("mSubId");  field.setAccessible(true);  try {   //獲取發送短信的卡   int smsType = ShareUtil.getInstance(context).getSMSType();   field.set(SM, smsType);   //1.136   //0.155   sentIntent.putExtra("address", number);   sentIntent.putExtra("msg", msg);   sentIntent.putExtra("time", time);   sentIntent.putExtra("msgBody", msgBody);   PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent,0);   //自動發送短信   SM.sendTextMessage(number, null, msg, sentPI, null);   Log.e("TAG", "onCreate: sendTextMessage");  } catch (IllegalAccessException e) {   e.printStackTrace();  } } catch (NoSuchFieldException e) {  e.printStackTrace(); }}

2.定義自動發送短信的SmsService

public class SmsService extends Service { private static final String TAG = SendSMSService.class.getSimpleName(); @Nullable @Override public IBinder onBind(Intent intent) {  return null; } @Override public void onCreate() {  super.onCreate();  new Handler().postDelayed(new Runnable() {   @Override   public void run() {    Toast.makeText(SendSMSService.this, "SmsService------------", Toast.LENGTH_SHORT).show();   }  }, 10000); }}

3.清單文件注冊

(1)短信監聽的廣播注冊

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

priority:設置優先級的屬性,999為最高優先級

(2)發送短信的服務注冊

<service android:name=".SmsService" />

4.Activity中設置關鍵字及回復內容

(1)雙卡模式選擇發送卡

使用RadioGroup實現雙卡模式的選擇,并用SharePreference保存選中的短信發送卡

mRgSim.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) {  switch (checkedId) {   case R.id.rb_1: simType = 0;    ShareUtil.getInstance(MainActivity.this).saveSMSType(simType);    break;   case R.id.rb_2:    simType = 1;    ShareUtil.getInstance(MainActivity.this).saveSMSType(simType);    break;   default:    ShareUtil.getInstance(MainActivity.this).saveSMSType(simType);    break;  } }});

(2)設置短信關鍵字及回復內容

//保存關鍵字及回復內容mEtSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {  //關鍵字  String key = mEtKey.getText().toString().trim();  //回復的內容  String content = mEtContent.getText().toString().trim();  //保存關鍵字及內容的bean  SmSBean bean = new SmSBean(key, content);  //獲取之前已添加的關鍵字及內容  init();  //添加新的關鍵字及內容  mDataList.add(bean);  //用sharePreference保存關鍵字及內容對象集合  ShareUtil.getInstance(MainActivity.this).saveSMS(mDataList);  //將關鍵字及內容輸入框置空  mEtKey.setText("");  mEtContent.setText(""); }});

總結

以上所述是小編給大家介紹的Android中BroadcastReceiver實現短信關鍵字自動回復功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尖扎县| 巴青县| 临邑县| 常宁市| 仁怀市| 姜堰市| 衡阳县| 靖西县| 叙永县| 广汉市| 彭州市| 兰考县| 怀宁县| 榆树市| 扎囊县| 县级市| 巴中市| 托里县| 阜新市| 垦利县| 泸水县| 通州区| 东阳市| 蒲城县| 延川县| 蓬安县| 沙田区| 阿图什市| 融水| 九龙城区| 都匀市| 宜州市| 娱乐| 壤塘县| 盐山县| 安化县| 文昌市| 阳江市| 宁陵县| 阜宁县| 安国市|