Как отобразить карточку QuickContact из виджета - PullRequest
5 голосов
/ 08 августа 2010

У меня есть виджет, который отображает изображение некоторых моих контактов, и я хотел бы отобразить карточку QuickContact, когда пользователь нажимает на одну из картинок.Я знаю, что должен использовать метод ContactsContract.QuickContact.showQuickContact (), но он требует View или Rect в качестве одного из входных параметров.Моя проблема в том, что виджеты имеют только RemoteViews, поэтому я не уверен, что передать в качестве параметра View или Rect.Любые идеи будут оценены.

Ответы [ 4 ]

6 голосов
/ 05 февраля 2011

Чтобы отобразить интерфейс QuickContact поверх виджета, вы можете сделать обратный вызов PendingIntent, используя метод, показанный здесь:

http://advback.com/android/working-with-app-widgets-android/

В вашем виджете onUpdate () создайте намерение и свяжите его с RemoteView:

intent = new Intent(context, MyWidget.class);  
intent.setAction(ACTION_WIDGET_RECEIVER);  
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
intent.setData(uri);
pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.my_widget_view, pendingIntent);

При щелчке по представлению вы получите уведомление onReceive () в своем виджете. Используйте Intent.getSourceBounds (), чтобы получить прямоугольник, и покажите QuickContact:

public void onReceive(Context context, Intent intent) {  
 if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {  
    Uri uri = intent.getData();
    if ( uri != null ) {
        QuickContact.showQuickContact(context, intent.getSourceBounds(), uri, ContactsContract.QuickContact.MODE_SMALL, null);
    }
 }  
 super.onReceive(context, intent);
}  
4 голосов
/ 08 августа 2010

Вы можете ссылаться на значок в XML

У меня есть это в файле XML:

     <QuickContactBadge
     android:id="@+id/photo"
    android:layout_width="54dip"
    android:layout_height="57dip"
    android:layout_marginLeft="5dip"
    android:background="@drawable/quickcontact_photo_frame"
    style="?android:attr/quickContactBadgeStyleWindowSmall"
     />

и этот код:

private QuickContactBadge mPhotoView;
mPhotoView = (QuickContactBadge) findViewById(R.id.photo);
mPhotoView.assignContactUri(objItem.getUri());
mPhotoView.setMode(QuickContact.MODE_MEDIUM);

и это режим вызова (но нажатие на значок обрабатывает это всплывающее окно, этот вызов слишком всплывающий, выбор сделан нажатием на что-то еще)

QuickContact.showQuickContact(viewContactQuick.this, mPhotoView,objItem.getLookupUri() , QuickContact.MODE_MEDIUM, null);
1 голос
/ 21 сентября 2010

Я тоже так искал. Может быть, источник приложения Контакты будет полезен. Я пытаюсь закопать: текст ссылки

0 голосов
/ 04 января 2011

Я тоже давно с этим борюсь. Глядя на исходный код Android, кажется, что Google сделал прозрачное действие под названием QuickContactActivity и поместил в него QuickContactWindow (класс, который создает всплывающее окно). Я попробовал то же самое, и прозрачная активность работает, но у меня возникают проблемы с отображением значка. Я знаю о коде QuickActions в Qberticus и попробовал его, но я бы предпочел использовать быстрые контакты, написанные Google, потому что дублировать их функциональность и внешний вид довольно сложно.

Я также получаю исключение ActivityNotFoundException, когда пытаюсь использовать метод QuickContact.showQuickContact () в Eclair - хотя он отлично работает на Froyo.

Вот мой вопрос. Было бы здорово, если бы мы могли работать вместе, чтобы решить эту проблему: ссылка

...