我正在编写一种付款方式,该方法会重定向到一个网址(我的服务器)并保存一些信息,然后转到银行页面以获得付费价格。但是有一个问题
我想等待浏览器意图完成/取消付款流程。但是在开始意图之后它立即完成,我无法通过startActivityForResult()
和onActivityResult()
进行核对。
我在调用startActivityForResult()
之后得到了一个结果。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(******));
startActivityForResult(intent, 100);
.
.
.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 100)
Log.w("web", "finish");
}
答案 0 :(得分:1)
浏览器不太可能返回结果,因为无法指定它应返回的位置。您应该使用WebView
代替并检测您认为完成或取消点的特定网址。
您需要实施WebViewClient
并覆盖public boolean shouldOverrideUrlLoading (WebView view, String url)
才能检测到特定网址的导航,如下所示:
class MyWebViewClient : WebViewClient {
@Override
public boolean shouldOverrideUrlLoading (WebView view, String url) {
if (url.equals(FINISH_URL)) {
// Finished, we return true to handle navigation ourselves
return true;
}
// Keep navigating
return false;
}
}
在WebView
中,您需要致电setWebViewClient()
:
WebView webview = findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new MyWebViewClient());
webview.loadUrl("https://yourpaymenturl.com/");
答案 1 :(得分:1)
浏览器不会发送结果。使用startActivityForResult()时,ACTION_VIEW和ACTION_MAIN协议无法正常工作。
您应该启动WebView并通过跟踪当前网址来确定用户是否已完成。