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的字段。

浙公网安备 33010602011771号