魅族M9修改SIM电话本报错

fakebear 2012-06-04 09:53:58
我写了一段代码,查找某个号码的sim卡电话本,查找到则执行更新,如果没有找到则新建一个。这段代码在很多手机上都验证通过了,只是在魅族M9的机器会报错。其中query命令没问题,但是update和insert都会抛出异常,应用崩溃。
01-01 08:01:21.976: E/AndroidRuntime(613): java.lang.UnsupportedOperationException: Cannot insert into URL: content://icc/adnbecause of no index
01-01 08:01:21.976: E/AndroidRuntime(613): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:146)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.content.ContentProviderProxy.update(ContentProviderNative.java:495)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.content.ContentResolver.update(ContentResolver.java:724)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.nationz.simtest03.CardOp.writeRecord(CardOp.java:91)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.nationz.simtest03.SimTest03Activity$1.onClick(SimTest03Activity.java:37)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.view.View.performClick(View.java:2626)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.view.View$PerformClick.run(View.java:9361)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.os.Handler.handleCallback(Handler.java:587)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.os.Handler.dispatchMessage(Handler.java:92)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.os.Looper.loop(Looper.java:130)
01-01 08:01:21.976: E/AndroidRuntime(613): at android.app.ActivityThread.main(ActivityThread.java:3768)
01-01 08:01:21.976: E/AndroidRuntime(613): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 08:01:21.976: E/AndroidRuntime(613): at java.lang.reflect.Method.invoke(Method.java:507)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-01 08:01:21.976: E/AndroidRuntime(613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-01 08:01:21.976: E/AndroidRuntime(613): at dalvik.system.NativeStart.main(Native Method)


实现代码如下:
ContentValues values = new ContentValues();
Uri u = null;
int updateRows = 0;
Cursor cursor = getContentResolver().query(contactUri, null, null, null, null);
if(cursor.moveToFirst() == true) {//sim通讯录不为空
//查找是否有该号码的通讯录
boolean found = false;
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String number = cursor.getString(cursor.getColumnIndex("number"));
if(number.equalsIgnoreCase(ADDRESS)) {
//找到该号码的通讯录,则更新本条记录
found = true;
values.put("tag", name);
values.put("number", number);
values.put("newTag", ss);
values.put("newNumber", ADDRESS);
StringBuffer selection = new StringBuffer();
selection.append("tag='").append(name).append("'");
selection.append(" AND ");
selection.append("number='").append(number).append("'");
updateRows = getContentResolver().update(contactUri, values, selection.toString(), null);
}
}while (cursor.moveToNext());
if(!found) {//没找到则创建新的通讯录
values.put("tag", ss);
values.put("number", ADDRESS);
u = parentActivity.getContentResolver().insert(contactUri, values);
}
}else {//如果sim通讯录为空,则创建新的通讯录
values.put("tag", ss);
values.put("number", ADDRESS);
u = parentActivity.getContentResolver().insert(contactUri, values);
}
...全文
254 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenailanyu 2012-10-15
  • 打赏
  • 举报
回复
楼主有没有遇到过,手机电话本已经写满,无法新建的情况。
这种情况下如果想对电话本进行操作,该怎么办呢?谢谢
jefferyyangkai 2012-06-05
  • 打赏
  • 举报
回复
m9对联系人、通话记录进行了特殊限制,在它的设置里面会有这项。(第一次安装程序的时候,他会弹出对话框,问你是否允许此程序访问联系人,你选择了否,他就会对contract provider返回值进行干扰,就是你遇到的情况)
南瓜饼 2012-06-05
  • 打赏
  • 举报
回复
楼主在manifest中加权限了吗?
fakebear 2012-06-05
  • 打赏
  • 举报
回复
添加应该要的权限和修改一样吧?或者更高才对。添加都可以成功,但修改却失败。不知道是不是魅族把这些api给封了。

现在测试又遇到了LG P933也是这个情况,真是郁闷啊。
fakebear 2012-06-05
  • 打赏
  • 举报
回复
我都说insert是可以了,肯定加了权限,也选择了允许访问联系人的。
fakebear 2012-06-04
  • 打赏
  • 举报
回复
我看了下java.lang.UnsupportedOperationException这个异常,应该是在IccProvider执行update时抛出,原因是调用URI_MATCHER.match(uri)未识别,但是同样在IccProvider里的query也调用了URI_MATCHER.match(uri),并没有出错啊。难道是魅族修改了这段代码?还是魅族要用别的方法才能更新SIM电话本?
CyberLogix 2012-06-04
  • 打赏
  • 举报
回复
应该是里面有保护机制吧或者你没有权限修改和删除
fakebear 2012-06-04
  • 打赏
  • 举报
回复
进一步跟踪后发现,insert可用,但update和delete都会报错,难道是魅族把这两个接口给封了?

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧