跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 当短信到达时,安卓 APP 可以获取到接收号码吗?
未分類
30 11 月 2020

当短信到达时,安卓 APP 可以获取到接收号码吗?

当短信到达时,安卓 APP 可以获取到接收号码吗?

資深大佬 : JasonLaw 0

假设我的安卓手机上面有两个 SIM 卡,我在上面安装一个改装过后的 APP,这个 APP 可以获取到短信的接收号码吗?

我看了Android: how to get sender and receiver phone number from raw sms – Stack Overflow,但是这个问题已经很久了,现在的话,还是没有方法吗?

大佬有話說 (10)

  • 資深大佬 : wukuai

    APP 源码就懒得翻了,用 adb 不香吗,直接读库:

    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

  • 資深大佬 : watzds

    安卓短信数据库都能读到,不过现在的安卓版本,要先成为默认短信应用才有权限读取,不过这样系统原先的短信应用就读不到了

  • 資深大佬 : qwe7002

    这个消息在 PDU 里,你可以直接调用 getOriginatingAddress()方法获取。从 SmsMessage[]数组中的任意一个对象都可以获得到它

  • 主 資深大佬 : JasonLaw

    @qwe7002 #3 https://github.com/cdoyle45/Simple-SMS-Sender-Receiver/blob/8773d144bce3e86251651d10c470bc8c70269381/app/src/main/java/casey/app20/SMSReceiver.java#L24 这不是获取 sender 吗?但是我要的是 receiver 。

  • 資深大佬 : itgoyo

    你如果申请了阅读短信的权限,然后有方法可以读取到,但是有问题就是现在手机在短信列表的设置里面把允许第三放读取短信的设置给关了,所以有这两个步骤。因为最近在做一个读取短信然后自动填充的功能。

  • 主 資深大佬 : JasonLaw

    @wukuai #1 这个能在 APP 运行时使用吗?我不是太懂 Android 。

  • 主 資深大佬 : JasonLaw

    @itgoyo #5 “你如果申请了阅读短信的权限,然后有方法可以读取到”。请问是怎样的方法呢?

  • 資深大佬 : itgoyo

    “`
    public class PhoneCode extends ContentObserver {

    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);
    }
    }
    “`

  • 主 資深大佬 : JasonLaw

    @itgoyo #8 你是说 address 吗? address 是 sender 的号码还是 receiver 的号码?

  • 資深大佬 : itgoyo

    sender 的发送端的号码,大多数都是 10690 开头的

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具