Есть ли какое-либо решение, позволяющее отследить закрытие нового веб-представления и предоставить информацию моему приложению? - PullRequest
0 голосов
/ 09 февраля 2020

Я новичок в android разработке. Сейчас я занимаюсь разработкой аутентификации на основе firebase, используя android собственный веб-просмотр. Я попытался создать новое веб-представление (отображается в новом приложении) и успешно подключить сайт авторизации в новом веб-представлении. но я не могу дать некоторую информацию, которую я получил из нового веб-просмотра в мое приложение. Как я могу предоставить информацию, полученную из нового веб-вида, моему приложению?

Ниже приведен мой код.

import androidx.appcompat.app.AppCompatActivity;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private WebView mv;
    public Dialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mv = findViewById(R.id.webView);
        mv.loadUrl("");

        WebSettings mvs = mv.getSettings();

        mvs.setJavaScriptEnabled(true);
        mvs.setJavaScriptCanOpenWindowsAutomatically(false);
        mvs.setUseWideViewPort(false);
        mvs.setCacheMode(WebSettings.LOAD_NO_CACHE);
        mvs.setBuiltInZoomControls(false);
        mvs.setSupportZoom(false);
        mvs.setJavaScriptCanOpenWindowsAutomatically(true);
        mvs.setSupportMultipleWindows(true);
        mvs.setDomStorageEnabled(true);

        mv.setWebChromeClient(new MyWebChromeClient());
        mv.setWebViewClient(new WebViewClientClass());
    }

    @Override
    public boolean onKeyDown (int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mv.canGoBack()) {
            mv.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            WebView newWebView = new WebView(MainActivity.this);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;

            transport.setWebView(newWebView);
            resultMsg.sendToTarget();

            newWebView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                    browserIntent.setData(Uri.parse(url));
                    startActivity(browserIntent);
                    return true;
                }
            });

            return true;
        }
    }
    private class WebViewClientClass extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);

            return true;
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }
        @Override
        public void onReceivedError(final WebView view, int errorCode, String description,
                                    final String failingUrl) {
            // super.onReceivedError(view, errorCode, description, failingUrl);
            Context mContext = getApplicationContext();
        }
    }
}

...