Python怎么接收手机短信?

python

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

更多Python知识请关注

以上是 Python怎么接收手机短信? 的全部内容, 来源链接: utcz.com/z/528563.html

回到顶部