双模(CDMA/GSM)手机实现短信监听

来源:互联网 发布:app源码 编辑:程序博客网 时间:2024/05/07 02:10

 

一、问题分析:
最近在做一个通过短信远程启动应用的功能,要用到短信监听,代码如下:
 
实际应用时发现双模手机对接收到的短信处理时总是在SmsMessage.createFromPdu的地方出现异常,异常信息:
 java.lang.OutOfMemoryError: array size too large
        at com.android.internal.telephony.cdma.SmsMessage.parsePdu(SmsMessage.java:658)
        at com.android.internal.telephony.cdma.SmsMessage.createFromPdu(SmsMessage.java:116)
        at android.telephony.SmsMessage.createFromPdu(SmsMessage.java:162)
 
而在android的源码中可以看到createFromPdu方法:
 
如果是双模手机,调用此方法时会产生错误,问题就在于源码的TelephonyManager.getDefault().getPhoneType();该方法的返回值没有对应的双模手机的类型,而原生的android系统是不支持双模手机的。
 
二、解决办法:
 
我们可以采用广播接收者和内容观察者相结合的方式,直接读取手机的短信数据库,这样就避免了错误的产生,废话就不多说了,直接上代码:
 
最后别忘了在AndroidManifest.xml中添加相应的权限,
 
还有别忘了注册广播接收者:
 
这样就能适应所有的android手机了,无论是双模还是单模都没问题,问题解决了。

 

原创粉丝点击