重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
這篇文章將為大家詳細講解有關怎么在Android中利用BroadcastReceiver實現短信關鍵字自動回復功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
創新互聯公司:2013年開創至今為各行業開拓出企業自己的“網站建設”服務,為超過千家公司企業提供了專業的做網站、成都網站建設、網頁設計和網站推廣服務, 按需網站設計由設計師親自精心設計,設計的效果完全按照客戶的要求,并適當的提出合理的建議,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據客戶的實際情況給出合理的網站構架,制作客戶同行業具有領先地位的。
1.自定義SmsBroadcastReceiver
(1)自定義SmsBroadcastReceiver繼承自BroadcastReceiver,并重寫OnReceive方法
mContext = context; //獲取短信的bundle Bundle 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 ListsmsList = 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)短信監聽的廣播注冊
priority:設置優先級的屬性,999為最高優先級
(2)發送短信的服務注冊
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實現短信關鍵字自動回復功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。