原理是:手机与电脑采用usb线缆相连(或wifi相连),利用adb shell命令获取所有短信(仅取每条短信的主要几个字段:号码、时间、阅读标志、类型、内容)。自己再根据需要查找短信。
【解决方案】
def timeStamp(timeNum):
import datetime
timeStamp1 = float(timeNum) / 1000
dt = datetime.datetime.fromtimestamp(timeStamp1)
return dt
def adb_sms_list():
import os
sms_cmd = 'adb shell content query --uri content://sms/'
# 读取手机通话记录 adb shell content query --uri content://call_log/calls
ret = os.popen(sms_cmd)
size_str = ret.buffer.read().decode('utf-8')
# print(size_str)
sms_list = size_str.split('Row:')
print(f'短信列表原始长度{len(sms_list)}')
# print(sms_list[0], sms_list[1], sms_list[2], sms_list[3], sms_list[-3], sms_list[-2], sms_list[-1])
sms_list2 = []
for sms in sms_list:
item_list = sms.split(',')
a1 = {}
for item in item_list:
if ' address' in item:
a1['address'] = item.replace('address=', '').strip()
elif ' date=' in item:
a1['date'] = timeStamp(item.replace('date=', '').strip())
elif ' read' in item:
a1['read'] = item.replace('read=', '').strip()
elif ' type' in item:
a1['type'] = item.replace('type=', '').strip()
elif ' body' in item:
a1['body'] = item.replace('body=', '').strip()
if a1:
sms_list2.append(a1)
else:
print('异常短信为:', item_list)
print('=' * 30)
print(f'共获取正常短信{len(sms_list2)}条')
if len(sms_list2) > 0:
return sms_list2
else:
return None
s3 = adb_sms_list()
print(s3)