【发布时间】: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);
标签: android android-contacts android-contentresolver contactscontract