最近在接支付宝的需求,我们需要在游戏中的webview点击按钮后打开支付宝钱包应用,按钮点击后会将阿里自定义的uri传过来,然后我们有这个uri去启动支付宝钱包,
最开始我写的代码如下:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("Jonathan", "Jonathan: url = " + url);
if( url.indexOf(boyaaSchemes) == 0 )
{
LuaEvent.onWebViewShouldStartLoad(handle, url.substring(boyaaSchemes.length()));
return false;
} else if (url.startsWith(alipaySchemes)) {
Intent intent = new Intent();
intent.setData(Uri.parse(url));
AppActivity.mActivity.startActivity(intent);
return false;
}
}
在已经安装支付宝的手机上,可以运行成功,但是在没有安装支付宝钱包的手机上,就不行,问题就在于要事先检查是不是有对应的activity跟这个uri对应,正确的代码如下:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("Jonathan", "Jonathan: url = " + url);
if( url.indexOf(boyaaSchemes) == 0 )
{
LuaEvent.onWebViewShouldStartLoad(handle, url.substring(boyaaSchemes.length()));
return false;
} else if (url.startsWith(alipaySchemes)) {
Intent intent;
try {
intent = Intent.parseUri(url, 0);
} catch (URISyntaxException e) {
e.printStackTrace();
return false;
}
if (intent != null && intent.resolveActivity(AppActivity.mActivity.getPackageManager()) != null) {
AppActivity.mActivity.startActivity(intent);
}
return false;
}
}