最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中BroadcastReceiver實(shí)現(xiàn)短信關(guān)鍵字自動回復(fù)功能

 更新時間:2018年06月05日 11:42:49   作者:ruancw  
實(shí)現(xiàn)手機(jī)短信監(jiān)聽的方式有兩種:一是通過ContentObserver觀察者實(shí)現(xiàn)監(jiān)聽,另一種就是通過廣播即BroadcastReceiver實(shí)現(xiàn)短信監(jiān)聽,文章中通過使用BroadcastReceiver實(shí)現(xiàn)有新短信的及時監(jiān)聽及包含設(shè)定的關(guān)鍵字時自動回復(fù)

前言:因公司業(yè)務(wù)需要,需要一臺手機(jī)專門回復(fù)客戶訂購的套餐的短信,之前一直是人工手動回復(fù),但比較麻煩且回復(fù)可能不及時,于是項(xiàng)目經(jīng)理就讓實(shí)現(xiàn)根據(jù)短信的關(guān)鍵字自動回復(fù)功能。

實(shí)現(xiàn)手機(jī)短信監(jiān)聽的方式有兩種:一是通過ContentObserver觀察者實(shí)現(xiàn)監(jiān)聽,另一種就是通過廣播即BroadcastReceiver實(shí)現(xiàn)短信監(jiān)聽,文章中通過使用BroadcastReceiver實(shí)現(xiàn)有新短信的及時監(jiān)聽及包含設(shè)定的關(guān)鍵字時自動回復(fù).

效果圖:

清單文件添加權(quán)限:

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

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

/**
 * 發(fā)送短信的方法
 * @param msg 發(fā)送的短信內(nèi)容
 * @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的屬性
 // 創(chuàng)建發(fā)送短信意圖
 Intent sentIntent = new Intent(SENT_SMS_ACTION);

 Field field = null;
 try {
  field = SMClass.getDeclaredField("mSubId");
  field.setAccessible(true);
  try {
   //獲取發(fā)送短信的卡
   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);
   //自動發(fā)送短信
   SM.sendTextMessage(number, null, msg, sentPI, null);
   Log.e("TAG", "onCreate: sendTextMessage");
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  }
 } catch (NoSuchFieldException e) {
  e.printStackTrace();
 }
}

2.定義自動發(fā)送短信的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)短信監(jiān)聽的廣播注冊

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

priority:設(shè)置優(yōu)先級的屬性,999為最高優(yōu)先級

(2)發(fā)送短信的服務(wù)注冊

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

4.Activity中設(shè)置關(guān)鍵字及回復(fù)內(nèi)容

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

使用RadioGroup實(shí)現(xiàn)雙卡模式的選擇,并用SharePreference保存選中的短信發(fā)送卡

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)設(shè)置短信關(guān)鍵字及回復(fù)內(nèi)容

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

總結(jié)

以上所述是小編給大家介紹的Android中BroadcastReceiver實(shí)現(xiàn)短信關(guān)鍵字自動回復(fù)功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android 利用 APT 技術(shù)在編譯期生成代碼

    Android 利用 APT 技術(shù)在編譯期生成代碼

    本文主要講解Android 利用 APT 技術(shù)在編譯期生成代碼,這里提供詳細(xì)的資料,并講解如何實(shí)現(xiàn),有興趣的小伙伴可以參考下
    2016-08-08
  • Android使用開源框架Fresco處理圖片

    Android使用開源框架Fresco處理圖片

    這篇文章主要介紹了Android使用開源框架FRESCO處理圖片的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 詳解Android的登錄那點(diǎn)事

    詳解Android的登錄那點(diǎn)事

    本篇為大家介紹的內(nèi)容包括:1、用戶連續(xù)多次輸錯密碼,增加驗(yàn)證碼驗(yàn)證;2、Android如何通過http請求達(dá)到與服務(wù)器之間的通訊。內(nèi)容簡單,便于學(xué)習(xí)。
    2016-12-12
  • Android實(shí)現(xiàn)倒計時的方案梳理

    Android實(shí)現(xiàn)倒計時的方案梳理

    這篇文章主要介紹了Android實(shí)現(xiàn)倒計時的方案梳理,下面文章圍繞主題展開Android倒計時方案,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Flutter替換字符串中的html標(biāo)簽

    Flutter替換字符串中的html標(biāo)簽

    這篇文章主要為大家介紹了Flutter替換字符串中的html標(biāo)簽實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • 福利來了!帶你“愛上Android”

    福利來了!帶你“愛上Android”

    送書!一言不合就送書,《愛上Android》一書深入淺出,詳細(xì)講解了Android開發(fā)的知識,帶著大家愛上Android,帶領(lǐng)大家開啟真正的Android開發(fā)之旅
    2017-08-08
  • Android編程實(shí)現(xiàn)左右滑動切換背景的方法

    Android編程實(shí)現(xiàn)左右滑動切換背景的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)左右滑動切換背景的方法,涉及Android圖形資源動態(tài)調(diào)用與動作監(jiān)聽相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android實(shí)現(xiàn)移動小球和CircularReveal頁面切換動畫實(shí)例代碼

    Android實(shí)現(xiàn)移動小球和CircularReveal頁面切換動畫實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于利用Android如何實(shí)現(xiàn)移動的小球和CircularReveal頁面切換動畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • Android搭建grpc環(huán)境過程分步詳解

    Android搭建grpc環(huán)境過程分步詳解

    本篇文章使用的IDE是Android Studio。這里先吐槽一句,安卓項(xiàng)目搭建grpc環(huán)境,不管是引入插件還是引入第三方庫,對于版本的要求都極為苛刻,一旦版本不匹配就會報錯,所以對于版本的搭配一定要注意
    2023-04-04
  • Android圖片上傳實(shí)現(xiàn)預(yù)覽效果

    Android圖片上傳實(shí)現(xiàn)預(yù)覽效果

    這篇文章主要介紹了Android圖片上傳實(shí)現(xiàn)預(yù)覽效果的相關(guān)資料,需要的朋友可以參考下
    2016-01-01

最新評論

夏津县| 闽清县| 太仆寺旗| 自贡市| 砚山县| 灵武市| 普洱| 乌恰县| 武功县| 昌吉市| 乡城县| 四会市| 永定县| 乌拉特前旗| 营山县| 新乡市| 青阳县| 麦盖提县| 砚山县| 建阳市| 乌兰浩特市| 芮城县| 武功县| 黄龙县| 密山市| 壤塘县| 大名县| 博兴县| 区。| 同江市| 龙岩市| 阳朔县| 尼勒克县| 松溪县| 琼海市| 南开区| 宁化县| 郯城县| 苍梧县| 德保县| 潼南县|