就是一直存储联系人到SIM卡,一旦SIM卡已经存满,就提示说SIM卡已满。
现在不知道如何取到SIM卡漫的状态值!
现在不知道如何取到SIM卡漫的状态值!
解决方案 »
- 【Android我来了】android项目res文件夹疑问
- 界面设计问题---求解决
- Google通讯录源码在Eclipse中为什么有错误?
- 手机QQ以及微信聊天的界面 ,listview是怎么实现的?就是别人说话是左边,自己说话是右边,谁研究过这个界面啊?多给说说~
- 关于android中SQLite rawQuery的返回值问题
- android 用httpclient访问服务器不传参数直接传值如何写
- 如何将txt文本格式里的内容传递到文本框中
- Android实现多屏远程监控
- 安卓聊天程序是自己开发还是用第三方的好?
- Android TextView边界表情显示不全(如图)如何解决?
- 远程wipe与加锁是如何实现的?
- 编译froyo过程中的问题 新手 请勿喷
时间太紧迫了,如果能告知,就太感谢了!
可以这样绕道解决,先insert一个空的,然后看看是否成功,不成功就说明满了....这样也行吧,要是能插进去,就是没满,然后把插入的这个空的再删了...
但是处理逻辑就变得很复杂,插入每笔联系人之前都要事先插入一个空联系人去试探一下!
感觉谷歌不会做的这么弱的!
Telephony.Sms.Intents.SIM_FULL_ACTION联系人满不满竟然没api!
如果5次都失败就认定sim卡已满
只能说SIM卡已满的可能性比较大而已!
在android的framework中是可以取得sim卡中所有联系人的数目也能获得已用的数目,但是在应用层通过provider暴露出来的接口只有query,update,insert,delete四个。
你要获得sim卡是不是已经满了有两个办法
1是修改insert函数,让它返回失败原因(比如说sim卡已满)。
2是再加一个查询sim卡联系人容量的函数。
这两个办法都会折腾死你。。所以还不如弄个多插入几次都失败的话就算已满,虽然这不是百分百的正确,但是我觉得可靠性还可以的了。
boolean success = addIccRecordToEf(efType, tag, number, null, pin2);
只要不成功
if (!success) {
return null;
}
所以只要在上层Uri adnUrl = getContentResolver().insert(Uri.parse("content://icc/adn"), values);
然后判断adnUrl是不是为null即可!
是在这可以判断,问题是你没法把这个结果再返回到上一层。
但是没法用messagebox之类的玩意来告诉用户sim卡已满
判断adnUrl是不是为null就行了!
在adnrecordloader里面:
int[] recordSize = (int[])ar.result;
// recordSize is int[3] array
// int[0] is the record length
// int[1] is the total length of the EF file
// int[2] is the number of records in the EF file
// So int[0] * int[2] = int[1]
if (recordSize.length != 3 || recordNumber > recordSize[2]) {
throw new RuntimeException("get wrong EF record size format",
ar.exception);
}
这个就是判断已满的异常,然后上面iccprovider在insert的时候会捕获这个异常赋值给success!