Откройте ссылку в браузере с помощью Compose for Desktop

Как открыть ссылку в браузере , если я нажмите на на кнопку . Я использую для этого Compose for Desktop .

      Button(onClick = {
    // What I have to write here..
}) {
    Text(
        text = "Open a link",
        color = Color.Black
    )
}

Заранее спасибо.

3 ответа

Используйте метод Desktop#browse(URI) . Он открывает URI в браузере пользователя по умолчанию.

      public static boolean openWebpage(URI uri) {
    Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
    if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
        try {
            desktop.browse(uri);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return false;
}

public static boolean openWebpage(URL url) {
    try {
        return openWebpage(url.toURI());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    return false;
}

Вдохновленный /questions/40996375/kak-otkryit-brauzer-po-umolchaniyu-s-pomoschyu-java/40996384#40996384 , чтобы также работать на Linux и Mac:

      fun openInBrowser(uri: URI) {
    val osName by lazy(LazyThreadSafetyMode.NONE) { System.getProperty("os.name").lowercase(Locale.getDefault()) }
    val desktop = Desktop.getDesktop()
    when {
        Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE) -> desktop.browse(uri)
        "mac" in osName -> Runtime.getRuntime().exec("open $uri")
        "nix" in osName || "nux" in osName -> Runtime.getRuntime().exec("xdg-open $uri")
        else -> throw RuntimeException("cannot open $uri")
    }
}

Button(onClick = { openInBrowser(URI("https://domain.tld/page")) }) {
    Text(
        text = "Open a link",
        color = Color.Black
    )
}

Минимальный пример

  1. поместите код функции в модуль commonMain
      expect fun browseUrl(url: String)
  1. поместите код функции в модуль DesktopMain
      actual fun browseUrl(url: String) {
    val desktop = Desktop.getDesktop()
    desktop.browse(URI.create(url)) 
}
  1. использовать
      onClick = {
    browseUrl("http://${link}")
}
Другие вопросы по тегам