Как программно открыть внешний URL-адрес при нажатии кнопки с помощью jetpack compose?

#android #kotlin #onclick #android-jetpack-compose

Вопрос:

Как программно открыть внешний URL-адрес при нажатии кнопки с помощью jetpack compose?

     @Composable
    fun MyButton() {
     Button(onClick = {
    //enter code here
    })
}
 

Ответ №1:

Вот возможный способ сделать это:

 @Composable
fun MyButton() {
    val context = LocalContext.current
    val intent = remember { Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com/")) }

    Button(onClick = { context.startActivity(intent) }) {
        Text(text = "Navigate to Google!")
    }
}
 

Внутри @Composable функций у вас есть одна вещь, называемая «Локальная композиция».

Классы CompositionLocal позволяют неявно передавать данные через составные функции их составным потомкам

localContext-один из этих классов. Указанное намерение является распространенным способом открытия внешнего URL-адреса на Android.

Комментарии:

1. Большое вам спасибо, я попробую.

2. Сработало великолепно! Еще раз спасибо

3. Приятно это слышать!

Ответ №2:

Более простой альтернативой является использование LocalUriHandler :

 val uriHandler = LocalUriHandler.current
uriHandler.openUri(uri)
 

Пусть это будет коротко и мило 😊

Ответ №3:

Я использовал CustomTabsIntent, что является еще одной возможностью, когда дело доходит до открытия ссылки в браузере телефона.

 // Within your @Composable function define the context val
val context = LocalContext.current

//Then in your modifier clickable use the CustomTabsIntent builder
modifier = Modifier
           .padding(start = 24.dp, end = 16.dp)
           .align(Alignment.CenterVertically)
           .clickable { 
              CustomTabsIntent.Builder().build().launchUrl(context, Uri.parse(pageUrl))
           }
 

Ответ №4:

@Составной веселый ВебБаттон() {

 val context = LocalContext.current
val webIntent: Intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com/"))

OutlinedButton(onClick = { context.startActivity(webIntent) }, modifier = Modifier.padding(8.dp)) {
    Text( text = "OPEN WEB",
        )
}
 

}