如何从小部件显示QuickContact卡

时间:2010-08-08 17:07:06

标签: android android-widget contacts

我有一个小部件,显示我的一些联系人的图片,我想在用户点击其中一张图片时显示QuickContact卡。我知道我应该使用ContactsContract.QuickContact.showQuickContact()方法,但它需要一个View或一个Rect作为输入参数之一。我的问题是Widgets只有RemoteViews,所以我不确定要传递什么作为View或Rect参数。任何想法都将不胜感激。

4 个答案:

答案 0 :(得分:6)

要在窗口小部件上显示QuickContact UI,您可以使用此处说明的技术进行回调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()来检索rect,并显示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);
}  

答案 1 :(得分:4)

您可以在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);

答案 2 :(得分:1)

我一直在寻找这个。也许联系人应用程序的来源会有所帮助。我正试图挖掘:link text

答案 3 :(得分:0)

我一直在努力解决这个问题。看看Android源代码,Google似乎制作了一个名为QuickContactActivity的透明活动,并将QuickContactWindow(创建弹出窗口的类)放在其中。我尝试了同样的事情,透明活动确实有效,但我很难让徽章显示出来。我知道Qberticus的QuickActions代码,我确实试过了,但我宁愿只使用google写的quickcontacts,因为复制它的功能和外观非常具有挑战性。

当我尝试在Eclair上使用QuickContact.showQuickContact()方法时,我也得到了ActivityNotFoundException - 虽然它在Froyo上运行得很好。

这是我的问题。如果我们能够共同努力解决这个问题,那真是太棒了:link