最近做的一个项目智能设备项目,应用与设备之间的通信是通过短信实现的。因此在项目中就涉及到短信的拦截、发送、删除以及状态更新等问题。
Android中使用短信功能要配置一些基本的权限:
`<!-- 发送消息 -->
<uses-permission android:name="android.permission.SEND_SMS" />
<!-- 阅读消息 -->
<uses-permission android:name="android.permission.READ_SMS" />
<!-- 写入消息 -->
<uses-permission android:name="android.permission.WRITE_SMS" />
<!-- 接收消息 -->
<uses-permission android:name="android.permission.RECEIVE_SMS" />`
Android4.4上增加了不少安全措施,除了把SELinux设置为enforce外,在短信方向也加强了限制。
4.4之后,新增了一个default sms的机制,应用必须是默认的短信程序才可以收发短信。收发短信之前,先调用
if (!SmsWriteOpUtil.isWriteEnabled(mActivity)) {
SmsWriteOpUtil.setWriteEnabled(
mActivity, true);
}
发送代码:
device_no是目标手机号码,text是发送内容。
SmsManager.getDefault().sendTextMessage(device_no, null, text, null, null);
读取手机中的短信代码:
protocol 0代表短信,1代表彩信;
address 手机号码
body 短信内容
date 短信时间,long整型
_id 短信sqlite数据库中的id,自增
read 是否已读
其它字段百度
private Uri SMS_INBOX = Uri.parse("content://sms/inbox");
String query = WhereBuilder.b("address", "in", targets).and("protocol", "=", "0").toString();
ContentResolver cr = mActivity.getContentResolver();
String[] projection = new String[]{
"_id", "body", "person", "address", "date"};//"_id", "address", "person",, "date", "type
Cursor cur = cr.query(SMS_INBOX, projection, query, null