您的位置:首页 > 移动开发 > Android开发

Android获取新收到的短信内容

2016-03-31 21:19 369 查看

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.结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: