2010-11-18 5 views
2

Wir haben eine tab-basierte Anwendung, die die Möglichkeit für einen Kunden unterstützen muss, eigene Plug-in-Tabs hinzuzufügen. Beim Start unserer App muss ich mich über das Plug-in informieren, damit ich die Registerkarte erstellen, an der richtigen Stelle platzieren, beschriften, Symbole zuweisen und die Plug-in-Aktivität starten kann. Es scheint, dass diese die Daten ich brauche, dies zu tun:Dynamische Registerkarte Plugins

  • Tab Priorität (verwendet, um die Registerkarten zu bestellen)
  • Tab Etikett
  • Tab Icon (s)
  • Tab Activity (für den Start über Intent)

Dies sind nur einige der Optionen, die ich in Betracht gezogen habe:

  1. Plug-in-Service. Dies würde erfordern, dass jede Plug-in-Aktivität einen zugehörigen Dienst hat. Ich würde dann PackageManager.queryIntentServices() verwenden, um Plug-In-Dienste mit einer bekannten Schnittstelle zu finden, und dann über diese Schnittstelle die Informationen anfordern, die ich über die Aktivität benötige.

  2. Plug-in-Abfrage Intent-Filter. Ich bin mir nicht sicher, ob das überhaupt möglich ist, aber ich denke daran, die Daten zu speichern, die ich für die Plug-in-Aktivität im Intent-Filter benötige. Ich würde PackageManager.queryIntentActivities() verwenden, um die Plug-in-Aktivitäten und das Filterfeld der ResolveInfo zu finden, um Informationen über den Filter zu erhalten. Ich habe jedoch nicht die Details zum Speichern/Abrufen dieser Informationen im Intent-Filter.

  3. Konfigurationsdaten. In der C++ - Welt würden diese Daten in einer XML-Konfigurationsdatei abgelegt, die von der App beim Start eingelesen wird. Dazu müsste die Konfiguration jedes Mal geändert werden, wenn ein Plug-in hinzugefügt wird. In unserem Fall ist das keine große Sache, da wir ein benutzerdefiniertes Gerät als Hauptanwendung verwenden. Aber ich würde es trotzdem lieber dynamisch machen. Wo befinden sich diese Daten auf Android?

Hat also jemand irgendwelche Empfehlungen, wie man das macht? Welche anderen Lösungen gibt es? Was ist am effizientesten?

Wie Sie wahrscheinlich sagen können, bin ich neu in Android. Ich habe mein Bestes getan, um Wege zu finden, dies zu implementieren, aber ich arbeite möglicherweise außerhalb der erwarteten Norm für Android.

Antwort

1

Überprüfen Sie den Weg Locale does plugins (über Intents). Für die Erkennung verwenden sie Intent-Filter, wobei die Eigenschaften android:name und android:icon für übereinstimmende Aktivitäten in der Locale-Plugin-Liste angezeigt werden. Es ist ein ziemlich glattes System, und sie haben Dokumentation und Beispielcode oben.

Soweit Sie diese Daten in Ihrer App behandeln, möchten Sie wahrscheinlich unter und PackageManagerqueryIntentActivityOptions aufrufen.

0

Ich denke, der einfachste Weg, um eine geordnete Sendung nutzen würde: http://developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast

Auf diese Weise rundfunkempfangs Informationen zurück an den Sender weitergeben können. Es sollte einfach sein, ein Label, eine Priorität und eine Absicht in das Ergebnis einzufügen, obwohl Sie für Icons wahrscheinlich eine ContentProvider verwenden müssen.

[Bearbeiten] Wenn Symbol und Label der Aktivität entsprechen, ist Yonis Antwort vielleicht eine bessere Idee.Sie sollten in der Lage sein, die Priorität mit Metadaten zu übergeben: http://developer.android.com/guide/topics/manifest/meta-data-element.html