布団の中にいたい

Elasticsearchいじったり、Androidアプリ書いたり。最近は数学の勉強が楽しくなってきました。

AndroidアプリからURLスキームでTwitterアプリに飛ばす

自分で実装中のアプリでTwitterの検索に飛ばす必要があったときに調べた内容です.

やったこととしては以下の2つです.

  • Twitterのアプリがインストールされているかを確認
  • インストールされていればTwitterアプリに,されてなければブラウザに飛ばす.

Twitterのアプリがインストールされているかを確認

アプリがインストールされているかはPackageManagerのgetPackInfoで調べられます.

PackageManager | Android Developers

class Utils {
    companion object {
        fun isApplicationInstalled(context: Context, uri: String): Boolean {
            val pm = context.packageManager

            try {
                pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES)
                return true
            } catch (e: PackageManager.NameNotFoundException) {
                return false
            }
        }
    }
}

getPackageInfoで指定されたアプリがなければ,PackageManager.NameNotFoundExceptionが投げられるので,そこでfalseを入れてreturnしてあげればアプリの有無を判定できます.ちなみにTwitterのpackageはcom.twitter.androidです.google playのアプリページのurlのquery stringのidパラメータを見ればわかります.

インストールされていればTwitterアプリに,されてなければブラウザに飛ばす

アプリの存在判定ができたので,後はそれで分岐させてインストールされていればアプリに,なければブラウザに飛ばすだけです.

画面遷移は普通にintentで実現できます.今回の場合,遷移先のActivityが明示的ではないので,俗に言う暗黙的intentってやつになります.暗黙的intentの場合,intentの第一引数にActionに設定します.Actionはデータ表示や電話をかけたりなど幾つかのActionがあるみたいです.今回の場合,どちらにしろデータ表示するだけなので,Intent.ACTION_VIEWを使用します.今回は以下みたいな感じでやりました.

val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)

まとめ

まだAndroidの勉強を初めて間もないですが,割りと使用していたのはActivity間の遷移だったので,今回のような暗黙的intentみたいなのはなかなかよく分からず大変でした.こういう知見を少しずつ貯めていきたいと思います.