Android4.4及其以上版本限制了第三方短信App的插入数据库的功能,只有默认短信程序才可以进行插入操作,系统也提供了设置界面,用来设置默认短信应用。这样的话,我们的备份应用如果还盲目地getContentResolver().insert
的话,就会发现代码成功执行,但是短信里啥都没有。所以解决办法是,要先把自己的应用设置成默认短信应用,然后再进行插入操作,然后记得把默认短信应用恢复回来。当然这里最主要的步骤就是设置成默认短信应用,因为这需要打开系统界面让用户点了才行。
这里记录一下我所做的过程,关于备份和恢复短信的具体代码这里就不赘述了。
下面分步说明:
- 第一步,注册2个receiver,1个activity,1个service:
<!-- BroadcastReceiver that listens for incoming SMS messages -->
<receiver
android:name=".sms.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
</receiver>
<!--BroadcastReceiver that listens for incoming MMS messages-->
<receiver
android:name=".sms.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH" >
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<