2010-08-08 9 views
5

Ich habe ein Widget, das das Bild einiger meiner Kontakte anzeigt, und ich möchte die QuickContact-Karte anzeigen, wenn der Benutzer auf eines der Bilder klickt. Ich weiß, dass ich die Methode ContactsContract.QuickContact.showQuickContact() verwenden sollte, aber es erfordert eine Ansicht oder ein Rect als einen der Eingabeparameter. Mein Problem ist, dass Widgets nur RemoteViews haben, also bin ich mir nicht sicher, was ich als View oder Rect Parameter übergeben soll. Irgendwelche Ideen würden geschätzt werden.So zeigen Sie die QuickContact-Karte vom Widget an

+0

Haben Sie tatsächlich die akzeptierte Antwort erhalten, um in einem Widget zu arbeiten? Ich sehe nicht, wie Sie ein QuickContactBadge zu einem Widget hinzufügen können. Sogar auf Android 2.2.1 bekomme ich W/AppWidgetHostView (20284): Fehler beim Aufblasen von AppWidget AppWidgetProviderInfo (provider = ComponentInfo {com.mypackage.xyz/c om.com.mypackage.xyz.FeedsWidget}): android.view .InflateException: Binär-XML-Datei Zeile # 131: Fehler beim Aufblasen der Klasse androi d.widget.QuickContactBadge --- da es keine unterstützte Komponente ist. –

Antwort

4

Sie das Abzeichen in der XML-Referenz kann

Ich habe dies in der XML-Datei:

 <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" 
    /> 

und diesem Code:

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

und das ist die Berufung Modus (aber der klick auf das badge wird dieses popup bearbeiten, dieser aufruf popup die wähler wird gemacht, indem man auf etwas anderes klickt)

QuickContact.showQuickContact(viewContactQuick.this, mPhotoView,objItem.getLookupUri() , QuickContact.MODE_MEDIUM, null); 
+0

Aber was passiert, wenn Sie mehr als ein QuickContactBadge auf dem Widget (Home-App) haben.Ihr "privates QuickContactBadge mPhotoView" verbindet sich nicht mit dem XML-Code. Woher wissen Sie also, welches QuickContactBadge zur privaten Anweisung gehört? Danke – alejom99

+0

Entschuldigung, es gibt eine fehlende Zeile 'mPhotoView = (QuickContactBadge) findViewById (R.id.photo);' – Pentium10

+0

Ist Ihr Code oben in einer Aktivität definiert? Der Grund warum ich frage ist, weil findViewById() nicht im AppWidgetProvider definiert ist. Wenn dies der Fall ist, definieren Sie dann eine Absicht, um diese Aktivität zu öffnen (wenn die Benutzer auf den QuickContactBade tippen) und dann die QuickContact-Karte anzuzeigen? – alejom99

1

Ich habe auch danach gesucht. Vielleicht ist die Quelle der Kontakte-App hilfreich. Ich versuche zu graben: link text

0

Ich habe mit dieser seit einiger Zeit auch jetzt gekämpft. Beim Betrachten des Android-Quellcodes scheint Google eine transparente Aktivität mit dem Namen QuickContactActivity erstellt und das QuickContactWindow (die Klasse, mit der das Popup erstellt wird) darin platziert. Ich habe das gleiche versucht und die transparente Aktivität funktioniert, aber ich habe Probleme, das Abzeichen zu bekommen. Ich kenne Qberticus QuickActions-Code und ich habe es ausprobiert, aber ich würde lieber nur die schnellen Kontakte verwenden, die Google geschrieben hat, weil seine Funktionalität und sein Aussehen ziemlich herausfordernd sind.

Ich habe auch ActivityNotFoundException bekommen, wenn ich versuche, die QuickContact.showQuickContact() -Methode auf Eclair zu verwenden - es funktioniert jedoch gut auf Froyo.

Hier ist meine Frage. Es wäre wirklich fantastisch, wenn wir zusammenarbeiten, könnte dieses Problem gelöst zu bekommen: link

6

Um die Quickcontact UI über ein Widget zu zeigen, können Sie einen Rückruf PendingIntent machen die Technik hier dargestellt mit:

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

in Ihrem Widget onUpdate(), erstellen Sie die Absicht und es mit dem 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); 

Wenn die Ansicht geklickt wird, erhalten Sie eine OnReceive() Benachrichtigung in Ihrem Widget erhalten. Verwenden Sie Intent.getSourceBounds(), um das rect abzurufen, und zeigen Sie den QuickContact an:

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); 
} 
Verwandte Themen