About Share Targets and Magic Names
If you are trying to use androidx.sharetarget:1.0.0-alpha01
and are wondering
why it’s not working correctly, you may not have used the right magic name.
androidx.sharetarget
is a new AndroidX library that offers support for
Android Q-style share targets on older devices. It supplies its own
ChooserTargetService
implementation (androidx.sharetarget.ChooserTargetServiceCompat
)
that you point to, and that in turn implements the Android 6.0-9.0 Direct Share API.
It builds the ChooserTarget
objects based on your Android Q share targets.
Android Q’s share targets are based on a combination of dynamic shortcuts
using ShortcutManager
and a new <share-target>
element in a static
shortcuts XML resource. Static shortcuts are identified in the manifest by
adding a android.app.shortcuts
<meta-data>
element to your launcher activity,
pointing to an XML resource.
Normally, you can name that XML resource whatever you want, so long as it is a valid resource name.
For androidx.sharetarget
, at least for 1.0.0-alpha01
, you must name that resource shortcuts.xml
.
That is because 1.0.0-alpha01
hard-codes that name, with a TODO
comment
to fix it:
private static XmlResourceParser getXmlResourceParser(Context context) {
// TODO: Parse the main manifest to find the right Xml resource for share targets
Resources res = context.getResources();
return res.getXml(res.getIdentifier("shortcuts", "xml", context.getPackageName()));
}
So, with luck, this restriction will be lifted in a future update to
the androidx.sharetarget
library.
In general, try to avoid magic names (such as shortcuts.xml
). And where
you need a magic name, make sure you document it.