android: showquickcontact() отлично работает на froyo, а не на eclair, который вызывает исключение ActivityNotFound

Я много гуглял за эти дни и не смог решить эту проблему. Я пишу приложение и виджет, в котором я хочу, чтобы диалоговое окно быстрого контакта отображалось, когда пользователь нажимает на 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, но я не позволил QuickContactBadge в AppWidget, поэтому я должен сделать это вместо этого. Я копался в исходном коде 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. Может кто-нибудь помочь мне здесь??

Спасибо!!!

1 ответ

Решение

Я решил это также некоторое время назад, но забыл опубликовать как. Я запустил новое прозрачное действие и получил прямоугольник, из которого было запущено намерение. У этого действия был только элемент QuickContactBadge, поэтому я разместил его с помощью прямоугольника и автоматически выполнил действие щелчка. Как только это отобразилось, я закончил упражнение, но значок остался. Поэтому, когда человек щелкнул мышью из QuickContactBadge, он вернется к тому, с чего начал.

У меня не было возможности тщательно изучить ваш (Omegamon) код - похож ли ваш метод на мой?

Другие вопросы по тегам