Android获取新收到的短信内容

来源:互联网 发布:中电科大数据院好进吗 编辑:程序博客网 时间:2024/04/29 03:10

1.写在前面

  • 在学习使用广播接收最新短信的时候,明明写的和视频里老师讲的代码一模一样,可就是收到的短信为null,不是说收不到短信,而是短信接收到了,收到的短信内容为null,于是度娘了半天,将优先级改到流氓级别的2147483647还是不行。
  • 于是我就换了一个思路,还是使用广播接收到有新消息的广播,但是短信内容不从广播中读取,而是延时几秒钟(ps:我用的是3秒),等系统短信应用将数据写入数据库,再从数据库读取短信内容。

2.代码

1.Java代码

public class SmsReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        // 睡眠3秒,等待系统信息APP将短信写入数据库        System.out.println("-----------手机收到新短息----------");        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        Uri uri = Uri.parse("content://sms/inbox");        ContentResolver smsResolver = context.getContentResolver();        // 获取sms表中_id最大值,即最新收到短信的_id值        Cursor idCursor = smsResolver.query(uri, new String[] { "count(_id)" }, null,                null, null);        idCursor.moveToNext();        int _id = idCursor.getInt(0);        idCursor.close();        Cursor smsCursor = smsResolver.query(uri, new String[] { "address",                "body" }, "_id = ?", new String[] { "" + _id }, null);        if (smsCursor != null) {            smsCursor.moveToNext();            String address = smsCursor.getString(0);            String body = smsCursor.getString(1);            System.out.println(_id + "," + address + ":" + body);        }    }}

2.清单文件

不要忘记在清单文件中注册

<receiver android:name=".receiver.SmsReceiver" >            <intent-filter                android:priority="2147483647">                <action android:name="android.provider.Telephony.SMS_RECEIVED" />            </intent-filter>        </receiver>

3.权限

也不要忘记权限


<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>

2.结果

这里写图片描述

0 0