猿问

Android-监听收到的短信

Android-监听收到的短信

我试图创建一个应用程序来监控输入的SMS消息,并通过传入的SMS启动一个程序,同时它也应该从SMS中读取内容。

工作流程:

  • 发送到Android设备的SMS
  • 自可执行应用程序
  • 阅读短信信息


慕盖茨4494581
浏览 1709回答 3
3回答

墨色风雨

public&nbsp;class&nbsp;SmsListener&nbsp;extends&nbsp;BroadcastReceiver{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;SharedPreferences&nbsp;preferences; &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onReceive(Context&nbsp;context,&nbsp;Intent&nbsp;intent)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;bundle&nbsp;=&nbsp;intent.getExtras();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//---get&nbsp;the&nbsp;SMS&nbsp;message&nbsp;passed&nbsp;in--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SmsMessage[]&nbsp;msgs&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;msg_from; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bundle&nbsp;!=&nbsp;null){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//---retrieve&nbsp;the&nbsp;SMS&nbsp;message&nbsp;received--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;pdus&nbsp;=&nbsp;(Object[])&nbsp;bundle.get("pdus"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgs&nbsp;=&nbsp;new&nbsp;SmsMessage[pdus.length]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;&nbsp;i<msgs.length;&nbsp;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgs[i]&nbsp;=&nbsp;SmsMessage.createFromPdu((byte[])pdus[i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg_from&nbsp;=&nbsp;msgs[i].getOriginatingAddress(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;msgBody&nbsp;=&nbsp;msgs[i].getMessageBody(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e){//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d("Exception&nbsp;caught",e.getMessage()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}注意:在您的清单文件中添加广播收发器-<receiver&nbsp;android:name=".listener.SmsListener"> &nbsp;&nbsp;&nbsp;&nbsp;<intent-filter> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<action&nbsp;android:name="android.provider.Telephony.SMS_RECEIVED"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;</intent-filter></receiver>添加此权限:<uses-permission&nbsp;android:name="android.permission.RECEIVE_SMS"&nbsp;/>

繁花如伊

注意,在某些设备上,如果没有Android:优先级=“1000”在意图筛选中:<receiver android:name=".listener.SmsListener">     <intent-filter android:priority="1000">         <action android:name="android.provider.Telephony.SMS_RECEIVED" />     </intent-filter></receiver>下面是一些优化:public class SmsListener extends BroadcastReceiver{     @Override     public void onReceive(Context context, Intent intent) {         if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {             for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {                 String messageBody = smsMessage.getMessageBody();             }         }     }}注: 该值必须是整数,如“100”。数字越高,优先级越高。默认值为0。该值必须大于-1000且小于1000。

芜湖不芜

基本上,如果我们没有每次连接多部分消息,那么遍历for循环是没有意义的:for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;msgs.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;msgs[i]&nbsp;=&nbsp;SmsMessage.createFromPdu((byte[])pdus[i]); &nbsp;&nbsp;&nbsp;&nbsp;msg_from&nbsp;=&nbsp;msgs[i].getOriginatingAddress(); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;msgBody&nbsp;=&nbsp;msgs[i].getMessageBody();}注意我们刚设置msgBody对于消息的各个部分的字符串值,而不管我们使用的是什么索引,这使得遍历SMS消息的不同部分的整个点变得毫无用处,因为它将被设置为最后一个索引值。相反,我们应该用+=或者,就像迈克指出的,StringBuilder:总之,以下是我的SMS接收代码:if&nbsp;(myBundle&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Object[]&nbsp;pdus&nbsp;=&nbsp;(Object[])&nbsp;myBundle.get("pdus");&nbsp;//&nbsp;pdus&nbsp;is&nbsp;key&nbsp;for&nbsp;SMS&nbsp;in&nbsp;bundle &nbsp;&nbsp;&nbsp;&nbsp;//Object&nbsp;[]&nbsp;pdus&nbsp;now&nbsp;contains&nbsp;array&nbsp;of&nbsp;bytes &nbsp;&nbsp;&nbsp;&nbsp;messages&nbsp;=&nbsp;new&nbsp;SmsMessage[pdus.length]; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;messages.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;messages[i]&nbsp;=&nbsp;SmsMessage.createFromPdu((byte[])&nbsp;pdus[i]);&nbsp;//Returns&nbsp;one&nbsp;message,&nbsp;in&nbsp;array&nbsp;because&nbsp;multipart&nbsp;message&nbsp;due&nbsp;to&nbsp;sms&nbsp;max&nbsp;char &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;+=&nbsp;messages[i].getMessageBody();&nbsp;//&nbsp;Using&nbsp;+=,&nbsp;because&nbsp;need&nbsp;to&nbsp;add&nbsp;multipart&nbsp;from&nbsp;before&nbsp;also &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;contactNumber&nbsp;=&nbsp;messages[0].getOriginatingAddress();&nbsp;//This&nbsp;could&nbsp;also&nbsp;be&nbsp;inside&nbsp;the&nbsp;loop,&nbsp;but&nbsp;there&nbsp;is&nbsp;no&nbsp;need}如果其他人也有同样的困惑,就把这个答案说出来。
随时随地看视频慕课网APP

相关分类

Android
我要回答