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

实例扩展:

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接收手机短信的代码整理 的全部内容, 来源链接: utcz.com/z/339060.html

回到顶部