我正在尝试打开http://链接,它将对Blackboard Collaborate的SSO逻辑进行单点登录。
该链接将检查身份验证,如果我已通过身份验证,则会转发我以打开该应用。
在Chrome浏览器中,它工作正常,因为它会将我重定向到我设备上安装的Blackboard应用程序。
问题是当我尝试在我的应用程序内打开WebView中的http://链接时。 http://链接被重定向到另一个http://链接,然后将重定向到 intent:// 链接。在这种情况下,WebView显示错误消息(无法找到主机名意图://blah.blah.blah)
这是我的代码,我正在尝试为'intent://'架构设置一个例外来做其他事情。但我不知道该怎么办!
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Open Blackboard app
if (url != null && url.startsWith("intent://")) {
Log.d("AG_LOG", "intent:// found");
Intent intent = new Intent();
intent.setData(Uri.parse(url));
view.getContext().startActivity(intent);
return true;
} else {
view.loadUrl(url, headers);
view.setWebChromeClient(new MyChromeClient());
view.setWebViewClient(new MyWebViewClient());
return false;
}
}
}
我尝试过Intent.ACTION_VIEW但没有奏效!
答案 0 :(得分:2)
最后我得到了解决方案:)
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Open Blackboard app
if (url != null && url.startsWith("intent://")) {
Log.d("AG_LOG", "intent:// found");
try {
Intent sessionIntnet = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); // Here the MAGIC
sessionIntnet.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
view.getContext().startActivity(sessionIntnet);
} catch (URISyntaxException e) {
e.printStackTrace();
Toast.makeText(MyActivity.this, "Unable to open app!", Toast.LENGTH_LONG).show();
}
return true;
} else {
view.loadUrl(url, headers);
view.setWebChromeClient(new MyChromeClient());
view.setWebViewClient(new MyWebViewClient());
return false;
}
}
}
新意图是使用Intent.ParseUri()解析意图的结果,并将Intent.URI_INTENT_SCHEME作为第二个参数传递。