5

我有一个小部件,可以通过电话号码打开联系人列表。我正在使用Contacts.Intents.SHOW_OR_CREATE_CONTACT 我知道它已被弃用,但我希望它适用于 android 1.6。我有一个电话号码可用于查找意图。这是代码

Intent contViewIntent = new Intent(Contacts.Intents.SHOW_OR_CREATE_CONTACT);
contViewIntent.setData(Uri.fromParts("tel", number, null));

PendingIntent contPendIntent = PendingIntent.getActivity(context, 0, contViewIntent, 0);
views.setOnClickPendingIntent(viewID, contPendIntent);

当联系人列表有 2 个或更多具有相同号码的联系人时,这将打开联系人列表并让用户选择一个。这在 1.6 上可以正常工作,但在 2.0 及更高版本上,它会显示一个联系人列表,其名称中只有数字 1 或数字 2,当您从列表中选择其中一个来查看时,您会收到错误消息。

04-09 19:12:47.891:错误/光标窗口(105):对字段插槽 0,6 的错误请求。numRows = 2,numColumns = 6

04-09 19:12:47.992: 错误/AndroidRuntime(105): java.lang.IllegalStateException: 从第 0 列第 6 行获取字段槽失败

我如何让它在上面的 1.6 和 2.0 上工作?

4

2 回答 2

1

Android 2.0 具有用于管理联系人的全新API(查找 ContactsContract)。在我的应用程序中,我最终编写了两次低级联系人管理 - 一次用于 2.0,一次用于 1.6 及以下版本(我通过反射检查 ContactsContract 类是否存在并在这种情况下切换到 2.0+ 代码)。

于 2010-06-29T02:55:31.140 回答
0

我认为您可能会更好地将 Android 内容提供程序 api 与 SQL 查询结合使用(查找与电话号码匹配的行):

http://developer.android.com/guide/topics/providers/content-providers.html

然后,如果查询返回两个联系人,您可以显示一个选项屏幕,要求用户选择合适的联系人。

然后您可以将 _id 字段(这是唯一的)传递给联系人应用程序以打开选定的联系人(避免您看到的错误)。

于 2010-05-09T16:18:13.527 回答