Android
Your app exposes a ContentProvider. Buzzio reads metadata and WebP files, then copies them locally after the user confirms.
Permission and provider
Buzzio defines com.ve.ghost.sticker.READ. Do not re-declare that permission in your app. Require it on your provider:
<provider
android:name=".StickerContentProvider"
android:authorities="${applicationId}.stickercontentprovider"
android:enabled="true"
android:exported="true"
android:readPermission="com.ve.ghost.sticker.READ" />
<queries>
<package android:name="com.ve.ghost" />
</queries>
Authority must start with your application id.
Open Buzzio
val intent = Intent("com.ve.ghost.intent.action.ENABLE_STICKER_PACK").apply {
putExtra("sticker_pack_id", packId)
putExtra("sticker_pack_authority", authority)
putExtra("sticker_pack_name", packName)
}
startActivityForResult(intent, 200)
Do not use WhatsApp’s action name. One Add button per pack. RESULT_OK means the user added it. ActivityNotFoundException means Buzzio is not installed.
ContentProvider paths
| URI | Returns |
|---|---|
content://{authority}/metadata | All packs |
content://{authority}/metadata/{pack_id} | One pack |
content://{authority}/stickers/{pack_id} | Sticker file names, emoji, a11y text |
content://{authority}/stickers_asset/{pack_id}/{file} | Bytes via openAssetFile |
Column names match WhatsApp so existing sticker apps can reuse query code. Full column list: spec.
Sample
Repo path examples/sticker-app/android — one placeholder pack and an Add to Buzzio button.