android: showquickcontact () отлично работает на froyo, а не на eclair, который вызывает исключение ActivityNotFound - PullRequest
3 голосов
/ 03 января 2011

Я много гуглял за эти дни и не смог решить эту проблему. Я пишу приложение и виджет, в котором нужно, чтобы диалоговое окно быстрого контакта отображалось, когда пользователь нажимает 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 = содержание: //com.android.contacts/contacts/lookup/0n4D29415739 flg = 0x14200000 (есть дополнения)

(я пропустил остальную часть logcat, но я могу вернуть его обратно, если вам, ребята, это нужно)

Когда я пробую точно такой же код на Froyo, он просто работает. Я не хочу, чтобы мое приложение предназначалось только для пользователей Froyo - я нацеливаюсь на 2.1 как минимальный уровень ОС. Я обнаружил, что некоторые другие люди из Переполнения стека пытаются справиться с отображением 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 Ответ

1 голос
/ 18 августа 2011

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

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

...