Android等待浏览器意图完成

时间:2017-12-27 14:38:01

标签: android android-intent android-activity

我正在编写一种付款方式,该方法会重定向到一个网址(我的服务器)并保存一些信息,然后转到银行页面以获得付费价格。但是有一个问题

我想等待浏览器意图完成/取消付款流程。但是在开始意图之后它立即完成,我无法通过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");
}

2 个答案:

答案 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协议无法正常工作。

https://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent,int)

您应该启动WebView并通过跟踪当前网址来确定用户是否已完成。