当短信到达时,安卓 APP 可以获取到接收号码吗?
假设我的安卓手机上面有两个 SIM 卡,我在上面安装一个改装过后的 APP,这个 APP 可以获取到短信的接收号码吗?
我看了Android: how to get sender and receiver phone number from raw sms – Stack Overflow,但是这个问题已经很久了,现在的话,还是没有方法吗?
假设我的安卓手机上面有两个 SIM 卡,我在上面安装一个改装过后的 APP,这个 APP 可以获取到短信的接收号码吗?
我看了Android: how to get sender and receiver phone number from raw sms – Stack Overflow,但是这个问题已经很久了,现在的话,还是没有方法吗?
adb shell su -c content query –uri content://sms –projection _id,address,body,read,date,type,sim_id
其中 sim_id 表示 sim 卡编号
example:
Row: 540 _id=1, address=10086, body= [公益短信] 居安思危 警钟长鸣: XX 市于 11 月 14 日 10:00 至 10:20 进行防空防灾警报试鸣,请广大市民朋友们届时注意辨听和识别防空防灾警报信号。(市人防办), read=0, date=1605270457272, type=1, sim_id=1
private Context mContext;
private String code;
private SmsListener mListener;
private Cursor mCursor;
private int index = 0;
public PhoneCode(Context context, Handler handler, SmsListener listener) {
super(handler);
this.mContext = context;
this.mListener = listener;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(“验证码”, “onChange”);
index++;
mCursor = mContext.getContentResolver().query(Uri.parse(“content://sms/”), new String[]{“_id”, “address”, “read”, “body”, “date”}, null,
null, “date desc”);
if (mCursor == null) {
return;
}
while (mCursor.moveToNext()) {
String address = mCursor.getString(mCursor.getColumnIndex(“address”));
String body = mCursor.getString(mCursor.getColumnIndex(“body”));
if (!address.endsWith(“268082”)) {
return;
}
String regEx = “(?<![0-9])([0-9]{” + 4 + “})(?![0-9])”;
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
code = matcher.group();
if (mListener != null) {
mListener.onResult(code, index);
}
}
}
if (mCursor != null) {
mCursor.close();
}
}
public interface SmsListener {
void onResult(String result, int index);
}
}
“`