相关代码 下载 http://download.csdn.net/detail/mwq30123/7368545
1.短信有权限也不可以写入的问题
<uses-permission android:name="android.permission.WRITE_SMS" />
原因:contentprovider中数据访问 多了一步校验
if (enforceReadPermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
……….. }
AppOpsManager中定义了OP_WRITE_SMS默认值是MODE_IGNORED
解决: AppOpsManager中定义了相应的操作控制MODE_IGNORED,MODE_ALLOWED,以及修改Op_mode的hide方法setMode,需要提供当前的PkgName和PkgUserID。
一次修改,终生有效。
SMS_RECEIVED_ACTION 广播,谁都可以收到,但不可中断
新增SMS_DELIVER_ACTION,只能由默认短信应用接收到
3.短信拦截问题
4.2以前的短信拦截,通过SMS_RECEIVED_ACTION广播,可以接收和解析短信,但是不能阻止短信被写入到SMS DB中
解决方案
广播接收到时间:
time--1390795992234--
onReceive : SMS_RECEIVED
DB中短信记录时间
_ID 20
ADDRESS 18651660481 /
DATE 1390795992270 /
DATE_SENT 1390795992000 /
BODY …
一:根据time,sender,body去DB删除此条短信
二:Service中注册Observe监听Sms Content Onchanged 读取到最新的一条,执行相应的解析和删除操作。