We have a tab based application that needs to support the ability for a customer to add their own plug-in tab(s). When starting our app I need to find out about the plug-in so that I can create the tab, place it in the correct spot, label it, assign icons for it and launch the plug-in activity as it’s content. It appears that this is the data I need to do this:
- Tab priority (used to order the tabs)
- Tab Label
- Tab Icon(s)
- Tab Activity (for launching via Intent)
These are some of the options I’ve considered:
-
Plug-in service. This would require each plug-in activity to have a related service. I would then use PackageManager.queryIntentServices() to find plug-in services with a known interface, then request the information I need about the activity via that interface.
-
Plug-in Intent Filter Query. I’m not sure if this is even possible, but the thought is to store the data I need in the Intent Filter for the plug-in activity. I would use PackageManager.queryIntentActivities() to find the plug-in activities and the filter field of the ResolveInfo to get information about the filter. However, I don’t have the details of how to store/retrieve that information in the Intent Filter.
-
Configuration data. In the C++ world, this data would be placed in an XML configuration file that is read in by the app at start-up. This would require modifying the config any time a plug-in is added. In our case it’s not a big deal as we’re targeting a custom device that we’re the main app on. But I’d still prefer to do it dynamically. Where does this data reside on Android?
So does anyone have any recommendations on how to do this? What other solutions are there? What is most efficient?
As you can probably tell, I’m new to Android. I’ve done my best to find ways to implement this, but I might be working outside the expected norm for Android.
Check out the way Locale does plugins (via Intents). For discovery, they use intent filters, using the
android:nameandandroid:iconproperties on matching Activities to display in the Locale plugin list. It’s a pretty slick system, and they have documentation and sample code up.As far as handling that data in your app, you’ll probably want to read up on
ResolveInfoandPackageManager‘squeryIntentActivityOptionscall.