近期三星陆续放出android4.4.2ROM更新包,android4.4.2对短信虽说是放开了权限,但其实是加强了限制,一台手机智能通过一个设置为默认应用的短信应用软件才能发送短信,否则就无法对短信数据库进行操作。

以为只是对这个进行了变更, 认真观察android4.4.2 mms源码完,发现对短信的广播也进行了一些变更,有些厂家为了兼容会继续发送android.provider.Telephony.SMS_RECEIVED广播,但是有些厂家就不厚道了,在android4.4上就发送android.provider.Telephony.SMS_DELIVER广播,因为他只对自带的短信应用负责。

所以短信应用如果需要兼容android4.4.2及以下版本,则需要接收这两个广播,这样一来就可以保证都能收的到;但是总是开心的太早,换了一部android4.4.2的手机,发现开始接收到重复的短信,原来这些所谓厚道的厂家,两个广播都发;这下好了,改怎么处理呢?

这边有一个最土的方式,就是拦截,获取短信时间,判断时间是否与上一条短信时间相同,如果相同不做处理,基本上是同事触发。这个方法虽然最快,但是并不觉的靠谱,继续实现的话,还得继续分析android4.4.2的源码。

以下提供判断android4.4.2默认短信应用代码:

/**
* 默认短信检测
* @param context 应用对象
* @param myPackageName 应用包名
* @return
*/
public static boolean isDefaultSms(Context context,String myPackageName){
boolean isDefault=false;
try {
int currentapiVersion=android.os.Build.VERSION.SDK_INT;
if(currentapiVersion>=android.os.Build.VERSION_CODES.KITKAT){
String defaultSmsApplication = Telephony.Sms.getDefaultSmsPackage(context);
if (defaultSmsApplication != null && defaultSmsApplication.equals(myPackageName)) {
isDefault=true;
}
}
} catch (Exception e) {
// TODO: handle exception
}
return isDefault;
} /**
* 前往设置默认短信应用
* @param context 应用对象
* @param myPackageName 应用包名
*/
public static void startSetDefault(Context context,String myPackageName){
String ACTION_CHANGE_DEFAULT = "android.provider.Telephony.ACTION_CHANGE_DEFAULT";
String EXTRA_PACKAGE_NAME = "package";
int currentapiVersion=android.os.Build.VERSION.SDK_INT;
if(currentapiVersion>=android.os.Build.VERSION_CODES.KITKAT){
if(!isDefaultSms(context,myPackageName)){
Intent intent = new Intent(ACTION_CHANGE_DEFAULT);
intent.putExtra(EXTRA_PACKAGE_NAME, context.getPackageName());
context.startActivity(intent);
}
}
}

  

android4.4.2 短信广播变更的更多相关文章

  1. Android短信监听实现,及Android4.4之后短信机制变更

    前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去    按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...

  2. Android 短信广播接收相关问题

    本人是Android新手,最近做了一个关于监听手机短信功能的应用,我在网上看资料了解到广播分为有序广播和无序广播,有序广播:无序广播又称普通广播,其中的利弊我也一时没搞清楚,我用的是有序广播实现的,具 ...

  3. BroadcastReceiver 接收系统短信广播

    BroadcastReceiver 接收系统短信广播 /* 注册广播:    * |--静态注册  (在AndroidManifest .xml 中注册)  * <receiver androi ...

  4. Android4.4 RIL短信接收流程分析

    最近有客户反馈Android接收不到短信,于是一头扎进RIL里面找原因.最后发现不是RIL的问题,而是BC72上报短信的格式不对,AT+CNMA=1无作用等几个小问题导致的.尽管问题不在RIL,但总算 ...

  5. Android4.4 往短信收件箱中插入自定义短信(伪造短信)

    这段时间稍微有点空闲,把前一段学习Android做过的一些小项目整理整理.虽然没有什么工程量很大的项目,但是对于一个新手,解决这些问题还是花了一段时间.感觉还是非常有记录的意义呢~~~么么哒*—* 今 ...

  6. android4.4短信新概念

    android4.4对短信引入了一个全新的概念:默认短信应用.即android用户可以在系统设置里面选择一个默认的短信应用,只有这个应用才能进行手机的基本短信操作.按照google自己的解释这样做的原 ...

  7. android 使用广播 接收和拦截 android系统短信

    package com.app.sms_broadcastreceiver; import android.app.Activity; import android.content.Broadcast ...

  8. 让你的短信应用迎接Android 4.4(KitKat)

    原文地址:Getting Your SMS Apps Ready for KitKat 发送和接收短信是手机最基本的功能,很多的开发者也开发了很多成功的应用来增强Android这一方面的体验.你们当中 ...

  9. Android开发——短信电话拦截/接听电话

    1.短信拦截 首先需要声明的是,Android4.4版本以上,如果想做到短信拦截,必须成为default sms,把所有短信相关的功能都包揽了,然后再做短信拦截.但这种做法,适配性和兼容性的工作是非常 ...

随机推荐

  1. android技巧:EditText输入错误时该怎样提示用户

    验证用户输入内容(EditText)应该及时准确的告诉用户,那么在Android系统中提示用户通常有以下做法: 1) 使用Toast提示 1 Toast.makeText(this, "邮箱 ...

  2. 读取Assets中的文件数据

    try { // 返回的字节流 InputStream is = getResources().getAssets().open("info.txt"); // 当读取时,属于文本 ...

  3. Folding

    题意: 给定一个串,求能化成的最短循环节串(把重复字符串转化成循环节形式) 分析: 不是太好想,如果让求最短长度还好,dp[i][j],表示区间[i,j]化成的最小长度,dp[i][j]=min(dp ...

  4. MSDN 中 对vector::erase()的解释.xml

    pre{ line-height:1; color:#f0caa6; background-color:#2d161d; font-size:16px;}.sysFunc{color:#e54ae9; ...

  5. 使用最小堆来完成k路归并 6.5-8

    感谢:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486 声明:供自己学习之便而收集整理 题目:请给出一个时间为O(nl ...

  6. VBA

    1.ActiveWorkbook是Application对象的一个属性,表示的是一个active Workbook. 2.Application对象可以获得一些顶级的对象,比如ActiveCell,A ...

  7. 从一个简单的Java单例示例谈谈并发

    一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...

  8. 第二百一十七天 how can I 坚持

    JavaScript  document.getElementByName()获取数组,for循环,搞了一天,好笨. 明天要下雪了,好冷. 双十一,天猫搞的挺特别啊,晚上抢了个小米红包,不知道买啥,哎 ...

  9. 【转】B树、B-树、B+树、B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  10. jshint 安装使用

    首先要安装nodjs, 参考另一篇文章: Ubuntu 编译安装node.js 然后运行 npm install jshint -g 之后在要扫描的目录下运行命令 jshint . >> ...