contentResolver.query(ContactsContract.Contacts.CONTENT_URI...) 如果在 Intent.ACTION_INSERT 之后调用,则返回 0

Posted

技术标签:

【中文标题】contentResolver.query(ContactsContract.Contacts.CONTENT_URI...) 如果在 Intent.ACTION_INSERT 之后调用,则返回 0 计数光标【英文标题】:contentResolver.query(ContactsContract.Contacts.CONTENT_URI...) return 0 count Cursor if called after Intent.ACTION_INSERT 【发布时间】:2017-12-29 17:09:12 【问题描述】:

Huawei P8 上测试我的应用时,我遇到了一种奇怪的行为。在模拟器(android 版本 4、5、6、7)和 ASUS (android 6) 和 Samsung Galaxy S2 (Android 4.2) 上一切正常。

以下步骤适用于物理设备和模拟器。致电contentResolver.query() 后,我得到一个带有我设备上所有联系人的光标。

    我打开我的应用程序 我打电话给contentResolver.query(ContactsContract.Contacts.CONTENT_URI...);

除了我的Huawei P8,以下步骤适用于所有地方;用我的 Huawei P8,只有它,我得到一个 0 计数光标

    我打开我的应用程序 在我的应用中,我打开一个Intent 以在设备上添加新联系人 我添加了一个新联系人,或者我没有添加联系人就关闭了活动 我打电话给contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

这是我在设备上获取联系人的方式:

ContentResolver contentResolver = getBaseContext().getContentResolver();    
Cursor cursor =  contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

这就是我从我的应用程序中打开 Activity 以在设备上添加新联系人的方式

Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
intent.putExtra("finishActivityOnSaveCompleted", true);
startActivityForResult(intent, 101);

似乎在调用new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI) 后,联系人表被“锁定”了。

我是否必须以某种方式“关闭” Intent 才能查询ContactsContract.Contacts.CONTENT_URI

重要提示:例如,如果我调用 Intent.ACTION_CALL 而不是 Intent.ACTION_INSERT,我没有遇到任何问题,并且能够成功查询 ContactsContract.Contacts.CONTENT_URI。所以,问题是在华为 P8 上“调用”Intent.ACTION_INSERT 和查询ContactsContract.Contacts.CONTENT_URI

提前谢谢你。

【问题讨论】:

你能不断地重现这种行为吗?听起来很奇怪...如果您从插入意图返回后将查询延迟几秒钟怎么办? 是的,我能够不断地重现这种行为!在对 ContactsContract.Contacts.CONTENT_URI 进行查询之前,我还尝试等待近一分钟,但我一直得到 0 计数光标 在其他设备上测试,可能是你手机的问题 我在华硕试了试,效果很好。是华为P8的bug!!!什么鬼! 试试intent.setType(Contacts.CONTENT_TYPE); 【参考方案1】:

(为了完整起见,我会回答这个问题)

这可能是设备错误,请在其他设备上尝试相同的代码。

【讨论】:

我在三星 S2 (android 4.2) 和华硕 (android 6) 上试过,我的代码有效。好像真的是华为P8的bug

以上是关于contentResolver.query(ContactsContract.Contacts.CONTENT_URI...) 如果在 Intent.ACTION_INSERT 之后调用,则返回 0 的主要内容,如果未能解决你的问题,请参考以下文章

Android 1.5:阅读短信

Mockito.anyString()在Kotlin中与NPE崩溃

Android:在列中获取最高值

android 电话号码作为 data1 返回

text 服务器阻塞puerto 80 con subdominios con PHP

text 服务器块con subdominios y php,con SSL。