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)
我知道我可以通过追加http或https在URL之前解决此问题(如果不存在)但是如果我的URL以其他协议ftp或file其他协议开头.任何人都可以帮我解决这个问题.
正如您所说,这个问题与格式不正确的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)
| 归档时间: |
|
| 查看次数: |
16372 次 |
| 最近记录: |