📘

[Android] EXTRA_INITIAL_INTENTSでカスタムの共有シートを無くせるケース・無くせないケース

2023/10/18に公開1

背景

DroidKaigi 2023の「共有」セッションを拝見して、
自分が開発しているアプリのカスタム共有シートを無くせるかどうか、検証してみた。
https://youtu.be/3s-25Lg00iI?si=IgnMHwZPUeD9DrDa

結論

EXTRA_INITIAL_INTENTSで渡したIntentは、最初の2つしか標準の共有シートに表示されない。
なので、この制限でやりたい事が実現できるなら、カスタムの共有シートを無くせる。

補足

EXTRA_INITIAL_INTENTSについて

https://youtu.be/3s-25Lg00iI?si=oew7hHog0dlHWfP7&t=1659
標準の共有シートに対して、

  • アイテムの並び替え
  • SEND以外のactionを渡す
  • 追加の引数を渡す

をおこなえる。

自分が開発しているアプリがなぜカスタム共有シートを使っているのか

一部の共有先(XとLINE)に対しては、共有で渡すテキストをカスタマイズしたいため。

EXTRA_INITIAL_INTENTSの制限について

https://takerpg.hatenablog.jp/entry/2020/03/28/031053

上記の記事で言及されているとおり、
EXTRA_INITIAL_INTENTSで渡されたIntentは最大で2つまでしか標準の共有シートで使われない様子。
今でも、MAX_EXTRA_INITIAL_INTENTS = 2のままだった。

https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/com/android/internal/app/ChooserActivity.java;l=310?q=MAX_EXTRA_INITIAL_INTENTS

EXTRA_INITIAL_INTENTSでアプリアイコンを標準の共有シートに表示する

Intentに対してsetPackageするだけだとアプリアイコンが表示出来ないっぽい。
setClassNameで、Activityを指定すれば大丈夫。

Discussion