AndroidアプリからURLスキームでTwitterアプリに飛ばす
自分で実装中のアプリでTwitterの検索に飛ばす必要があったときに調べた内容です.
やったこととしては以下の2つです.
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みたいなのはなかなかよく分からず大変でした.こういう知見を少しずつ貯めていきたいと思います.