android 开发时遇到的各种问题1--Android双模(CDMA/GSM)手机短信相关

这篇博客主要是用来记录平时开发时遇到的各种问题,给大家一个参考,也可以跟大家一起讨论讨论。

Android双模(CDMA/GSM)手机短信相关

  参考博客http://blog.sina.com.cn/s/blog_68ebf0be0101awix.html

双模手机对接收到的短信处理时总是在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(byte[] pdu)方法时会产生错误,问题就在于源码的TelephonyManager.getDefault().getPhoneType();该方法的返回值没有对应的双模手机的类型,而原生的android系统是不支持双模手机的。

这里,我改为用ContentResolver 查询手机通讯录数据库

 

        Cursor cursor = null;
        try {
            cursor = c.getContentResolver().query(Uri.parse("content://sms/inbox"),
                    new String[] {"_id", "address", "body"},where,null,"date desc");
            if(cursor!=null && cursor.moveToFirst()){
                address = cursor.getString(1);
                body = cursor.getString(2);  //短信内容
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }

数据库的操作,大家都很熟悉了,如果字段什么的不知道的话,直接把手机root,拿到数据库就能看了。或者idea调试的时候也可以查看cursor的字段。

 

 

posted @ 2013-07-09 23:57  走正路  阅读(436)  评论(0)    收藏  举报