就是一直存储联系人到SIM卡,一旦SIM卡已经存满,就提示说SIM卡已满。
现在不知道如何取到SIM卡漫的状态值!
现在不知道如何取到SIM卡漫的状态值!
解决方案 »
- android videoview屏幕缩放
- 编译Android4.1,出现 java.lang.OutOfMemoryError问题!!!小妹求赐教!
- 关于摄像头对焦问题
- 希望大侠推荐Android开发教程
- 求教:android webview设置的锚点在第一次加载html时不起作用,??急!!
- 求救,怎查找Anadroid Api
- Launcher中的WorkSapce,可以左右滑动切换屏幕页面的类 滑动到最后一界面如何继续
- eclipse安卓开发,人事管理系统。
- 新人菜鸟求助
- bash:build/soong/soong_ui.bash:权限不够
- 远程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!