意图打开URL

MAR*_*RK 1 url android android-intent

在我的应用程序中,我收到用户插入的URL.该URL可以是 - 例如 - xx.sd.使用任何Web浏览器,此URL都是有效的URL,但是当尝试按意图打开它时,会发生崩溃:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=xx.sd }.
我使用此检查此URL是有效的URL

Patterns.WEB_URL.matcher(model.getTarget().getUrl()).matches()
Run Code Online (Sandbox Code Playgroud)

并使用此代码打开意图

  Intent i = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(model.getTarget().getUrl()));
  itemView.getContext().startActivity(i);
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过追加httphttps在URL之前解决此问题(如果不存在)但是如果我的URL以其他协议ftpfile其他协议开头.任何人都可以帮我解决这个问题.

Rea*_*oid 7

正如您所说,这个问题与格式不正确的URL有关.

您可以检查URL 的ACTION_VIEW意图.首先,这个resolveActivity函数检查是否存在可以加载URL的任何应用程序.这将解决崩溃问题.

public void openWebPage(String url) {
        Uri webpage = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }else{
            //Page not found
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过异常处理来管理:

public void openWebPage(String url) {
        try {
            Uri webpage = Uri.parse(url);
            Intent myIntent = new Intent(Intent.ACTION_VIEW, webpage);
            startActivity(myIntent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(this, "No application can handle this request. Please install a web browser or check your URL.",  Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)