当前位置: 移动技术网 > IT编程>脚本编程>Python > Python接收手机短信的代码整理

Python接收手机短信的代码整理

2020年08月03日  | 移动技术网IT编程  | 我要评论

python解决接口测试获取手机验证码问题的方法:

android在收到短信后会发送一个action为android.provider.telephony.sms_received的广播,所以我们只需要写个类继承broadcastreceiver就可以很容易地监听到短信。

package com.example.getsms;
 
import android.content.broadcastreceiver;
import android.content.contentresolver;
import android.content.context;
import android.content.intent;
import android.os.bundle;
import android.telephony.smsmessage;
import android.text.textutils;
import android.util.log;
 
public class smsinterceptreceiver extends broadcastreceiver {
 
private final string tag = "smsrec";
 
 private static final string sms_extra_name ="pdus";
 
 @override
 public void onreceive(context context, intent intent) {
 // todo auto-generated method stub
 string message = "";
 
 log.e(tag, "free message " );
  
  bundle extras = intent.getextras();
  if ( extras != null ) {
   try {
   object[] smsextra = (object[]) extras.get( sms_extra_name );
    contentresolver contentresolver = context.getcontentresolver();
     
    log.e(tag, "free message " );
    for ( int i = 0; i < smsextra.length; ++i ) {
     smsmessage sms = smsmessage.createfrompdu((byte[]) smsextra[i]);
      
     string body = sms.getmessagebody().tostring();
     message += body;
    }
         
    log.e(tag, "free message : " + message);
   } catch (exception e) {
   // todo: handle exception
   log.e(tag, e.getmessage());
   }
  }  
 }
}

androidmanifest.xml里注册一下接收器:

 <receiver android:name=".smsinterceptreceiver">
   <intent-filter>
   <action android:name="android.provider.telephony.sms_received" />
   </intent-filter>
  </receiver>

添加权限:

<uses-permission android:name="android.permission.receive_sms"/>

python 代码,主要通过adb log来获取apk包所截取的短信信息,然后进行分析后既可使用。

__author__ = 'guozhenhua'
#coding=utf-8
import urllib2
import os,time
#解析短信验证码
os.system("adb logcat -c")
cmd="adb logcat -d |findstr e/smsrec"
#time.sleep(30);
while(1):
 smscode= os.popen(cmd).read()
 #print smscode
 if (smscode!=""):
  smscode=smscode.split("验证码:")[1].split(",")[0]
  break;
print "验证码是:"+smscode

实例扩展:

package com.example.getsms;


import android.content.broadcastreceiver;
import android.content.contentresolver;
import android.content.context;
import android.content.intent;
import android.os.bundle;
import android.telephony.smsmessage;
import android.text.textutils;
import android.util.log;


public class smsinterceptreceiver extends broadcastreceiver {


private final string tag = "smsrec";
 
 private static final string sms_extra_name ="pdus";
 
 @override
 public void onreceive(context context, intent intent) {
 // todo auto-generated method stub
 string message = "";
 
 log.e(tag, "free message " );
 
  bundle extras = intent.getextras();
  if ( extras != null ) {
   try {
   object[] smsextra = (object[]) extras.get( sms_extra_name );
    contentresolver contentresolver = context.getcontentresolver();
    
    log.e(tag, "free message " );
    for ( int i = 0; i < smsextra.length; ++i ) {
     smsmessage sms = smsmessage.createfrompdu((byte[]) smsextra[i]);
     
     string body = sms.getmessagebody().tostring();
     message += body;
    }
    
    
    log.e(tag, "free message : " + message);
   } catch (exception e) {
   // todo: handle exception
   log.e(tag, e.getmessage());
   }
  } 
  
 }


}

以上就是python接收手机短信的代码整理的详细内容,更多关于python怎么接收手机短信的资料请关注移动技术网其它相关文章!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网