LoginSignup
0

More than 5 years have passed since last update.

シェアするアプリによって挙動を変更する

Posted at

概要

Intent.createChooser を使ってシェアをする際に特定のアプリだけ挙動を変更したいということがありました。今回はメールアプリの場合だけ件名をつけることをゴールにします。

特に難しい内容ではなかったのですが備忘録として投稿します。

実装

特定のアプリだけ定義します。

enum class App(val packageName: String) {
    Gmail("com.google.android.gm"),
}

判定はこんな感じです。

/**
 * enumで定義したパッケージ名に存在するか確認
 */
private fun isMail(packageName: String): Boolean =
        App.values().filter { packageName.contains(it.packageName) }.count() > 0

少し長いですがシェアするときは次のようにします。

private fun share() {
    val targets: MutableList<Intent> = mutableListOf()
    val resolveInfoList = packageManager.queryIntentActivities(Intent().actionSend(), PackageManager.MATCH_ALL)
    resolveInfoList.forEach {
        val packageName = it.activityInfo.packageName
        targets.add(Intent().actionSend().apply {
            `package` = packageName
            setClassName(packageName, it.activityInfo.name)
            when (isMail(packageName)) {
                true -> putExtra(Intent.EXTRA_SUBJECT, "subject...")
                else -> putExtra(Intent.EXTRA_SUBJECT, "")
            }
            putExtra(Intent.EXTRA_TEXT, "message...")
        })
    }

    if (targets.isNotEmpty()) {
        val chooserIntent = Intent.createChooser(Intent(), "共有").apply {
            putExtra(Intent.EXTRA_INITIAL_INTENTS, targets.toTypedArray())
        }
        startActivity(chooserIntent)
    }
}

private fun Intent.actionSend(): Intent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
}

以上

Twitterアプリだけハッシュタグつけたい的なこともできるかと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0