📝
Android(Kotlin)でSNSアプリを開くintentを書きたいときに使えるスニペット
Androidで各SNSのアプリを持っていたらアプリを開く、持っていなかったらブラウザで開く、を実現するスニペットを作りました。
用意したのはYouTube、Instagram、Twitter、Facebook、Lineです。それぞれユーザーの個別ページに遷移するようになっています。ブラウザにはCustomTabsを使っていますが、好みに合わせて書き換えてください。
//YouTube
fun navigateToYouTubeUserPage(userId: String, context: Context) {
val url = "https://www.youtube.com/$userId"
try {
Intent(Intent.ACTION_VIEW).also {
it.setPackage("com.google.android.youtube")
it.data = Uri.parse(url)
context.startActivity(it)
}
} catch (e: ActivityNotFoundException) {
navigateToCustomTab(url, context)
}
}
//Instagram
fun navigateToInstagramUserPage(userId: String, context: Context) {
val url = "http://instagram.com/$userId"
try {
Intent(Intent.ACTION_VIEW).also {
it.setPackage("com.instagram.android")
it.data = Uri.parse(url)
context.startActivity(it)
}
} catch (e: ActivityNotFoundException) {
navigateToCustomTab(url, context)
}
}
//Twitter
fun navigateToTwitterUserPage(userId: String, context: Context) {
val url = "https://twitter.com/$userId"
try {
Intent(Intent.ACTION_VIEW).also {
it.setPackage("com.twitter.android")
it.data = Uri.parse(url)
context.startActivity(it)
}
} catch (e: ActivityNotFoundException) {
navigateToCustomTab(url, context)
}
}
//Facebook
fun navigateToFacebookUserPage(userId: String, context: Context) {
val url = "https://www.facebook.com/$userId"
try {
Intent(Intent.ACTION_VIEW).also {
it.setPackage("com.facebook.katana")
it.data = Uri.parse("fb://facewebmodal/f?href=$url")
context.startActivity(it)
}
} catch (e: ActivityNotFoundException) {
navigateToCustomTab(url, context)
}
}
//Line
fun navigateToLineOfficialAccountPage(lineId: String, context: Context) {
try {
Intent(Intent.ACTION_VIEW).also {
it.setPackage("jp.naver.line.android")
it.data = Uri.parse("line://ti/p/$lineId")
context.startActivity(it)
}
} catch (e: ActivityNotFoundException) {
navigateToCustomTab("https://line.me/ti/p/$lineId", context)
}
}
//Custom Tab
fun navigateToCustomTab(url: String, context: Context) {
val uri = Uri.parse(url)
CustomTabsIntent.Builder().also { builder ->
builder.setShowTitle(true)
builder.build().also {
it.launchUrl(context, uri)
}
}
}
これを作ったのは少し前なので、動かなかったら教えて下さい。
Discussion