android 4.4的改动很大,其中改动最大的可能就是短信机制
google出于安全和隐私考虑做了如下修改
①非default SMS app可以接收短信到达的广播,但是不能处理
②非default SMS app可以读取短信数据库,但是不能对其进行增删操作。
③下一步有可能会限制非default SMS app连读取短信数据库也不让了
④如果现存的短信类App不做改造,运行在Android 4.4也不会Crash,但是写入短信数据库数据时会失败。
默 认短信
在手机设置里多了一项设置----默认短信应用,可以选择系统自带短信应用,可以选择第三方短信应用。默认短信应用唯一,即如果设置第三方应用为default SMS app,那么系统自带的短信应用就失去增删SMS数据库的权限
那么如何判断当前app是不是default SMS app?如何设置default SMS app?
一、判断当前app是不是default SMS app
很幸运google为我们提供了Telephony.Sms.getDefaultSmsPackage() ;获取当前Default SMS app的包名。那么在我们的app中可以进行一下判断了,如果我们的app是default SMS app没问题;如果我们的app不是default SMS app那么我们就要提醒用户应该把我们的app设置为default SMS app 代码如下:
@SuppressLint("NewApi")
private void isDefaultSMS() {
final String myPackageName = getPackageName();
if (!Telephony.Sms.getDefaultSmsPackage(this).equals(getPackageName())) {
Intent intent =
new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
myPackageName);
startActivity(intent);
}
}
二、设置default SMS app
①可以提醒用户到手机设置-->更多-->默认短信应用,手动设置
这么干用户体验不太好,要用户手动点这点那,而且用户可能到手机设置里找不到那项设置,那么下面的方法就是一个可行的方案了。
②代码里通过打开Activity设置:如上面的代码段