3

这些天我做了很多谷歌搜索,但我无法解决这个问题。我正在编写一个应用程序和一个小部件,当用户ImageView通过调用QuickContact.showQuickContact(). 出于某种原因,每次我尝试使用 Eclair 时,都会抛出以下错误:

01-02 17:51:28.869: 错误/AndroidRuntime(657): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.sx.favwidget/com.sx.favwidget.PopupActivity}: android.content.ActivityNotFoundException: 否发现处理 Intent { act=com.android.contacts.action.QUICK_CONTACT dat=content://com.android.contacts/contacts/lookup/0n4D29415739 flg=0x14200000 的活动(有附加功能)

(我省略了 logcat 的其余部分,但如果你们需要,我可以把它放回去)

当我在 Froyo 上尝试完全相同的代码时,它就可以工作。我不想让我的应用程序只针对 Froyo 用户 - 我将 2.1 定位为最低操作系统级别。我发现 Stack Overflow 上的其他一些人正在努力让 QuickContacts 显示。

我可以使用 QuickContactBadge,这确实适用于 Eclair,但我不允许在 AppWidget 中使用 QuickContactBadge,所以我必须这样做。我翻阅了 Android 的源代码,找到了相关的 XML 文件和用于创建布局的代码,但我不能自己轻松地编译它,因为所有私有 API 调用都令人头疼。

这是我的代码。这很简单。

grid.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

        String name = ((TextView)v.findViewById(R.id.grid_item_label)).getText().toString();

        Cursor sc = getContentResolver().query(Contacts.CONTENT_URI, new String[] {Contacts.LOOKUP_KEY,   Contacts._ID}, Contacts.DISPLAY_NAME + "= ?", new String[] {name}, null);

        sc.moveToFirst();          

        String lookup_key = sc.getString(sc.getColumnIndex(Contacts.LOOKUP_KEY));

        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup_key);

        QuickContact.showQuickContact(getApplicationContext(), v, uri, QuickContact.MODE_SMALL, null);

        }
}

奇怪的是它可以在 Froyo 上运行,而不是 Eclair,但 API 调用自 Android 2.0 以来就一直存在。有人能帮我一下吗??

非常感谢!!!

4

1 回答 1

1

我前段时间也解决了这个问题,但忘了发布如何。我所做的是启动一个透明的新活动,并且我得到了启动意图的矩形。此活动只有一个 QuickContactBadge 元素,因此我使用矩形定位它并自动对其执行单击操作。一旦显示出来,我就完成了活动 - 但徽章仍然存在。因此,当此人点击离开 QuickContactBadge 时,他们会立即回到他们开始的位置。

我没有机会仔细阅读您的(Omegamon)代码-您的方法与我的相似吗?

于 2011-08-18T04:06:28.637 回答