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 的主要内容,如果未能解决你的问题,请参考以下文章
Mockito.anyString()在Kotlin中与NPE崩溃