android4.4.2 短信广播变更
近期三星陆续放出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 短信广播变更的更多相关文章
- Android短信监听实现,及Android4.4之后短信机制变更
前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去 按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...
- Android 短信广播接收相关问题
本人是Android新手,最近做了一个关于监听手机短信功能的应用,我在网上看资料了解到广播分为有序广播和无序广播,有序广播:无序广播又称普通广播,其中的利弊我也一时没搞清楚,我用的是有序广播实现的,具 ...
- BroadcastReceiver 接收系统短信广播
BroadcastReceiver 接收系统短信广播 /* 注册广播: * |--静态注册 (在AndroidManifest .xml 中注册) * <receiver androi ...
- Android4.4 RIL短信接收流程分析
最近有客户反馈Android接收不到短信,于是一头扎进RIL里面找原因.最后发现不是RIL的问题,而是BC72上报短信的格式不对,AT+CNMA=1无作用等几个小问题导致的.尽管问题不在RIL,但总算 ...
- Android4.4 往短信收件箱中插入自定义短信(伪造短信)
这段时间稍微有点空闲,把前一段学习Android做过的一些小项目整理整理.虽然没有什么工程量很大的项目,但是对于一个新手,解决这些问题还是花了一段时间.感觉还是非常有记录的意义呢~~~么么哒*—* 今 ...
- android4.4短信新概念
android4.4对短信引入了一个全新的概念:默认短信应用.即android用户可以在系统设置里面选择一个默认的短信应用,只有这个应用才能进行手机的基本短信操作.按照google自己的解释这样做的原 ...
- android 使用广播 接收和拦截 android系统短信
package com.app.sms_broadcastreceiver; import android.app.Activity; import android.content.Broadcast ...
- 让你的短信应用迎接Android 4.4(KitKat)
原文地址:Getting Your SMS Apps Ready for KitKat 发送和接收短信是手机最基本的功能,很多的开发者也开发了很多成功的应用来增强Android这一方面的体验.你们当中 ...
- Android开发——短信电话拦截/接听电话
1.短信拦截 首先需要声明的是,Android4.4版本以上,如果想做到短信拦截,必须成为default sms,把所有短信相关的功能都包揽了,然后再做短信拦截.但这种做法,适配性和兼容性的工作是非常 ...
随机推荐
- C#调用WebService实现天气预报 http://www.webxml.com.cn
C#调用WebService实现天气预报 2011-02-21 14:24:06 标签:天气预报 休闲 WebServices 职场 C# 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...
- 【Java多线程】两种基本实现框架
Java多线程学习1——两种基本实现框架 一.前言 当一个Java程序启动的时候,一个线程就立刻启动,改程序通常也被我们称作程序的主线程.其他所有的子线程都是由主线程产生的.主线程是程序开始就执行的, ...
- strcpy()的实现
看到有一个博客讲的比平时理解的更深入,mark一下:strcpy函数的实现 这里只写平时理解的,三个要点: //strcpy自己实现 char *strcpy(char *dest, const ch ...
- Chapter6:函数
执行函数的第一步是(隐式地)定义并初始化它的形参.所以,函数最外层作用域中的局部变量也不能使用与函数形参一样的名字. 局部静态变量:在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被 ...
- NativeInt
NativeInt ni = 100; //Wrong. Will issue an Error NativeInt ni = NativeInt(100); //Correct System::Ge ...
- 转】MyEclipse使用总结——MyEclipse文件查找技巧
原博文出自于:http://www.cnblogs.com/xdp-gacl/p/3781749.html 感谢! 一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: ...
- UNITY3D MAC版本破解
百度网盘下载地址: http://pan.baidu.com/s/1eQmvLqa#path=%252F 包含本体和破解文件 首先说明一下,如果是公司做开发建议去购买正版. 之前网上也有很多人贴出了破 ...
- 【原】Hadoop伪分布模式的安装
Hadoop伪分布模式的安装 [环境参数] (1)Host OS:Win7 64bit (2)IDE:Eclipse Version: Luna Service Release 2 (4.4.2) ( ...
- Connecting Physics Bodies
[Connecting Physics Bodies] The kinds of joints you can create in Sprite Kit. You add or remove join ...
- 用shell求两个文件的差集
假设有两个文件a.file和b.file,分别代表集合A和集合B. a.file的内容如下: abcde b.file的内容如下: cdefg 可以用grep命令 grep命令是常用来搜索文本内容的, ...