Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何允许webview上的多个窗口使facebook登录正常工作?_Java_Android - Fatal编程技术网

Java 如何允许webview上的多个窗口使facebook登录正常工作?

Java 如何允许webview上的多个窗口使facebook登录正常工作?,java,android,Java,Android,我正在为我的网站创建一个应用程序,当你点击facebook和google登录等外部链接时,你会看到一个新的窗口标签,在登录后关闭 我已经添加了mWebView.getSettings().setSupportMultipleWindows(true)

我正在为我的网站创建一个应用程序,当你点击facebook和google登录等外部链接时,你会看到一个新的窗口标签,在登录后关闭

我已经添加了
mWebView.getSettings().setSupportMultipleWindows(true)
MainFragment.java

public class MainFragment extends TaskFragment implements SwipeRefreshLayout.OnRefreshListener, AdvancedWebView.Listener {
    private static final String ARGUMENT_URL = "url";
    private static final String ARGUMENT_SHARE = "share";
    private static final int REQUEST_FILE_PICKER = 1;

    private boolean mProgress = false;
    private View mRootView;
    private StatefulLayout mStatefulLayout;
    private AdvancedWebView mWebView;
    private String mUrl = "about:blank";
    private String mShare;
    private boolean mLocal = false;
    private ValueCallback<Uri> mFilePathCallback4;
    private ValueCallback<Uri[]> mFilePathCallback5;
    private int mStoredActivityRequestCode;
    private int mStoredActivityResultCode;
    private Intent mStoredActivityResultIntent;

    public static MainFragment newInstance(String url, String share) {
        MainFragment fragment = new MainFragment();

        // arguments
        Bundle arguments = new Bundle();
        arguments.putString(ARGUMENT_URL, url);
        arguments.putString(ARGUMENT_SHARE, share);
        fragment.setArguments(arguments);

        return fragment;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        setRetainInstance(true);

        // handle fragment arguments
        Bundle arguments = getArguments();
        if (arguments != null) {
            handleArguments(arguments);
        }
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        int layout = WebViewAppConfig.PULL_TO_REFRESH == PullToRefreshMode.DISABLED ? R.layout.fragment_main : R.layout.fragment_main_swipeable;
        mRootView = inflater.inflate(layout, container, false);
        mWebView = mRootView.findViewById(R.id.main_webview);
        return mRootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // restore webview state
        if (savedInstanceState != null) {
            mWebView.restoreState(savedInstanceState);
        }

        // setup webview
        setupView();

        // pull to refresh
        setupSwipeRefreshLayout();

        // setup stateful layout
        setupStatefulLayout(savedInstanceState);

        // load data
        if (mStatefulLayout.getState() == StatefulLayout.EMPTY) loadData();

        // progress popup
        showProgress(mProgress);

        // check permissions
        if (WebViewAppConfig.GEOLOCATION) {
            PermissionUtility.checkPermissionAccessLocation(this);
        }
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    @Override
    public void onResume() {
        super.onResume();
        mWebView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mWebView.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mRootView = null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mWebView.onDestroy();
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (PermissionUtility.checkPermissionReadExternalStorageAndCamera(this)) {
            // permitted
            mWebView.onActivityResult(requestCode, resultCode, intent);
        } else {
            // not permitted
            mStoredActivityRequestCode = requestCode;
            mStoredActivityResultCode = resultCode;
            mStoredActivityResultIntent = intent;
        }
        //handleFilePickerActivityResult(requestCode, resultCode, intent); // not used, used advanced webview instead
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // save current instance state
        super.onSaveInstanceState(outState);
        setUserVisibleHint(true);

        // stateful layout state
        if (mStatefulLayout != null) mStatefulLayout.saveInstanceState(outState);

        // save webview state
        mWebView.saveState(outState);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // action bar menu
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_main, menu);

        // show or hide share button
        MenuItem share = menu.findItem(R.id.menu_main_share);
        share.setVisible(mShare != null && !mShare.trim().equals(""));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // action bar menu behavior
        switch (item.getItemId()) {
            case R.id.menu_main_share:
                IntentUtility.startShareActivity(getContext(), getString(R.string.app_name), getShareText(mShare));
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case PermissionUtility.REQUEST_PERMISSION_READ_EXTERNAL_STORAGE_AND_CAMERA:
            case PermissionUtility.REQUEST_PERMISSION_WRITE_EXTERNAL_STORAGE:
            case PermissionUtility.REQUEST_PERMISSION_ACCESS_LOCATION: {
                // if request is cancelled, the result arrays are empty
                if (grantResults.length > 0) {
                    for (int i = 0; i < grantResults.length; i++) {
                        if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                            // permission granted
                            if (requestCode == PermissionUtility.REQUEST_PERMISSION_READ_EXTERNAL_STORAGE_AND_CAMERA) {
                                // continue with activity result handling
                                if (mStoredActivityResultIntent != null) {
                                    mWebView.onActivityResult(mStoredActivityRequestCode, mStoredActivityResultCode, mStoredActivityResultIntent);
                                    mStoredActivityRequestCode = 0;
                                    mStoredActivityResultCode = 0;
                                    mStoredActivityResultIntent = null;
                                }
                            }
                        } else {
                            // permission denied
                        }
                    }
                } else {
                    // all permissions denied
                }
                break;
            }
        }
    }

    @Override
    public void onRefresh() {
        runTaskCallback(new Runnable() {
            @Override
            public void run() {
                refreshData();
            }
        });
    }

    @Override
    public void onPageStarted(String url, Bitmap favicon) {
        Logcat.d("");
    }

    @Override
    public void onPageFinished(String url) {
        Logcat.d("");

    }

    @Override
    public void onPageError(int errorCode, String description, String failingUrl) {
        Logcat.d("");
    }

    @Override
    public void onDownloadRequested(String url, String suggestedFilename, String mimeType, long contentLength, String contentDisposition, String userAgent) {
        Logcat.d("");
        if (PermissionUtility.checkPermissionWriteExternalStorage(MainFragment.this)) {
            Toast.makeText(getActivity(), R.string.main_downloading, Toast.LENGTH_LONG).show();
            DownloadUtility.downloadFile(getActivity(), url, DownloadFileUtility.getFileName(url));
        }
    }

    @Override
    public void onExternalPageRequest(String url) {
        Logcat.d("");
    }

    public void refreshData() {
        if (NetworkUtility.isOnline(getActivity()) || mLocal) {
            // show progress popup
            showProgress(true);

            // load web url
            String url = mWebView.getUrl();
            if (url == null || url.equals("")) url = mUrl;
            mWebView.loadUrl(url);
        } else {
            showProgress(false);
            Toast.makeText(getActivity(), R.string.global_network_offline, Toast.LENGTH_LONG).show();
        }
    }

    private void handleArguments(Bundle arguments) {
        if (arguments.containsKey(ARGUMENT_URL)) {
            mUrl = arguments.getString(ARGUMENT_URL);
            mLocal = mUrl.contains("file://");
        }
        if (arguments.containsKey(ARGUMENT_SHARE)) {
            mShare = arguments.getString(ARGUMENT_SHARE);
        }
    }

    // not used, used advanced webview instead
    private void handleFilePickerActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == REQUEST_FILE_PICKER) {
            if (mFilePathCallback4 != null) {
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null : intent.getData();
                if (result != null) {
                    String path = ContentUtility.getPath(getActivity(), result);
                    Uri uri = Uri.fromFile(new File(path));
                    mFilePathCallback4.onReceiveValue(uri);
                } else {
                    mFilePathCallback4.onReceiveValue(null);
                }
            }

            if (mFilePathCallback5 != null) {
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null : intent.getData();
                if (result != null) {
                    String path = ContentUtility.getPath(getActivity(), result);
                    Uri uri = Uri.fromFile(new File(path));
                    mFilePathCallback5.onReceiveValue(new Uri[]{uri});
                } else {
                    mFilePathCallback5.onReceiveValue(null);
                }
            }

            mFilePathCallback4 = null;
            mFilePathCallback5 = null;
        }
    }

    private void loadData() {
        if (NetworkUtility.isOnline(getActivity()) || mLocal) {
            // show progress
            if (WebViewAppConfig.PROGRESS_PLACEHOLDER) {
                mStatefulLayout.showProgress();
            } else {
                mStatefulLayout.showContent();
            }

            // load web url
            mWebView.loadUrl(mUrl);
        } else {
            mStatefulLayout.showOffline();
        }
    }

    private void showProgress(boolean visible) {
        // show pull to refresh progress bar
        SwipeRefreshLayout contentSwipeRefreshLayout = mRootView.findViewById(R.id.container_content_swipeable);
        SwipeRefreshLayout offlineSwipeRefreshLayout = mRootView.findViewById(R.id.container_offline_swipeable);
        SwipeRefreshLayout emptySwipeRefreshLayout = mRootView.findViewById(R.id.container_empty_swipeable);

        if (contentSwipeRefreshLayout != null) contentSwipeRefreshLayout.setRefreshing(visible);
        if (offlineSwipeRefreshLayout != null) offlineSwipeRefreshLayout.setRefreshing(visible);
        if (emptySwipeRefreshLayout != null) emptySwipeRefreshLayout.setRefreshing(visible);

        mProgress = visible;
    }

    private void showContent(final long delay) {
        final Handler timerHandler = new Handler();
        final Runnable timerRunnable = new Runnable() {
            @Override
            public void run() {
                runTaskCallback(new Runnable() {
                    public void run() {
                        if (getActivity() != null && mRootView != null) {
                            Logcat.d("timer");
                            mStatefulLayout.showContent();
                        }
                    }
                });
            }
        };
        timerHandler.postDelayed(timerRunnable, delay);
    }

    private void setupView() {
        // webview settings
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setAppCacheEnabled(true);
        mWebView.getSettings().setAppCachePath(getActivity().getCacheDir().getAbsolutePath());
        mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        mWebView.getSettings().setDomStorageEnabled(true);
        mWebView.getSettings().setDatabaseEnabled(true);
        mWebView.getSettings().setGeolocationEnabled(true);
        mWebView.getSettings().setSupportZoom(true);
        mWebView.getSettings().setBuiltInZoomControls(false);
        mWebView.getSettings().setSupportMultipleWindows(true);
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

        // user agent
        if (WebViewAppConfig.WEBVIEW_USER_AGENT != null && !WebViewAppConfig.WEBVIEW_USER_AGENT.equals("")) {
            mWebView.getSettings().setUserAgentString(WebViewAppConfig.WEBVIEW_USER_AGENT);
        }

        // advanced webview settings
        mWebView.setListener(getActivity(), this);
        mWebView.setGeolocationEnabled(true);

        // webview style
        mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); // fixes scrollbar on Froyo

        // webview hardware acceleration
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        } else {
            mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }

        // webview chrome client
        View nonVideoLayout = getActivity().findViewById(R.id.main_non_video_layout);
        ViewGroup videoLayout = getActivity().findViewById(R.id.main_video_layout);
        View progressView = getActivity().getLayoutInflater().inflate(R.layout.placeholder_progress, null);
        VideoEnabledWebChromeClient webChromeClient = new VideoEnabledWebChromeClient(nonVideoLayout, videoLayout, progressView, (VideoEnabledWebView) mWebView);
        webChromeClient.setOnToggledFullscreen(new MyToggledFullscreenCallback());
        mWebView.setWebChromeClient(webChromeClient);
        //mWebView.setWebChromeClient(new MyWebChromeClient()); // not used, used advanced webview instead

        // webview client
        mWebView.setWebViewClient(new MyWebViewClient());

        // webview key listener
        mWebView.setOnKeyListener(new WebViewOnKeyListener((DrawerStateListener) getActivity()));

        // webview touch listener
        mWebView.requestFocus(View.FOCUS_DOWN); // http://android24hours.blogspot.cz/2011/12/android-soft-keyboard-not-showing-on.html
        mWebView.setOnTouchListener(new WebViewOnTouchListener());

        // webview scroll listener
        //((RoboWebView) mWebView).setOnScrollListener(new WebViewOnScrollListener()); // not used

        // admob
        setupBannerView();
    }

    private void setupBannerView() {
        if (WebViewAppConfig.ADMOB_UNIT_ID_BANNER != null && !WebViewAppConfig.ADMOB_UNIT_ID_BANNER.equals("") && NetworkUtility.isOnline(getActivity())) {
            ViewGroup contentLayout = mRootView.findViewById(R.id.container_content);
            AdMobUtility.createAdView(getActivity(), WebViewAppConfig.ADMOB_UNIT_ID_BANNER, AdSize.BANNER, contentLayout);
        }
    }

    private void controlBack() {
        if (mWebView.canGoBack()) mWebView.goBack();
    }

    private void controlForward() {
        if (mWebView.canGoForward()) mWebView.goForward();
    }

    private void controlStop() {
        mWebView.stopLoading();
    }

    private void controlReload() {
        mWebView.reload();
    }

    private void setupStatefulLayout(Bundle savedInstanceState) {
        // reference
        mStatefulLayout = (StatefulLayout) mRootView;

        // state change listener
        mStatefulLayout.setOnStateChangeListener(new StatefulLayout.OnStateChangeListener() {
            @Override
            public void onStateChange(View view, @StatefulLayout.State int state) {
                Logcat.d(String.valueOf(state));
                // do nothing
            }
        });

        // restore state
        mStatefulLayout.restoreInstanceState(savedInstanceState);
    }

    private void setupSwipeRefreshLayout() {
        SwipeRefreshLayout contentSwipeRefreshLayout = mRootView.findViewById(R.id.container_content_swipeable);
        SwipeRefreshLayout offlineSwipeRefreshLayout = mRootView.findViewById(R.id.container_offline_swipeable);
        SwipeRefreshLayout emptySwipeRefreshLayout = mRootView.findViewById(R.id.container_empty_swipeable);

        if (WebViewAppConfig.PULL_TO_REFRESH == PullToRefreshMode.ENABLED) {
            contentSwipeRefreshLayout.setOnRefreshListener(this);
            offlineSwipeRefreshLayout.setOnRefreshListener(this);
            emptySwipeRefreshLayout.setOnRefreshListener(this);
        } else if (WebViewAppConfig.PULL_TO_REFRESH == PullToRefreshMode.PROGRESS) {
            contentSwipeRefreshLayout.setDistanceToTriggerSync(Integer.MAX_VALUE);
            offlineSwipeRefreshLayout.setDistanceToTriggerSync(Integer.MAX_VALUE);
            emptySwipeRefreshLayout.setDistanceToTriggerSync(Integer.MAX_VALUE);
        }
    }

    private String getShareText(String text) {
        if (mWebView != null) {
            if (mWebView.getTitle() != null) {
                text = text.replaceAll("\\{TITLE\\}", mWebView.getTitle());
            }
            if (mWebView.getUrl() != null) {
                text = text.replaceAll("\\{URL\\}", mWebView.getUrl());
            }
        }
        return text;
    }

    private boolean isLinkExternal(String url) {
        for (String rule : WebViewAppConfig.LINKS_OPENED_IN_EXTERNAL_BROWSER) {
            if (url.contains(rule)) return true;
        }
        return false;
    }

    private boolean isLinkInternal(String url) {
        for (String rule : WebViewAppConfig.LINKS_OPENED_IN_INTERNAL_WEBVIEW) {
            if (url.contains(rule)) return true;
        }
        return false;
    }

    // not used, used advanced webview instead
    private class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
            if (PermissionUtility.checkPermissionReadExternalStorageAndCamera(MainFragment.this)) {
                mFilePathCallback5 = filePathCallback;
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);
                return true;
            }
            return false;
        }

        @Override
        public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
            callback.invoke(origin, true, false);
        }

        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
            if (PermissionUtility.checkPermissionReadExternalStorageAndCamera(MainFragment.this)) {
                mFilePathCallback4 = filePathCallback;
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);
            }
        }

        public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType) {
            if (PermissionUtility.checkPermissionReadExternalStorageAndCamera(MainFragment.this)) {
                mFilePathCallback4 = filePathCallback;
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);
            }
        }

        public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
            if (PermissionUtility.checkPermissionReadExternalStorageAndCamera(MainFragment.this)) {
                mFilePathCallback4 = filePathCallback;
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                startActivityForResult(Intent.createChooser(intent, "File Chooser"), REQUEST_FILE_PICKER);
            }
        }
    }

    private class MyToggledFullscreenCallback implements VideoEnabledWebChromeClient.ToggledFullscreenCallback {
        @Override
        public void toggledFullscreen(boolean fullscreen) {
            if (fullscreen) {
                WindowManager.LayoutParams attrs = getActivity().getWindow().getAttributes();
                attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
                attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
                getActivity().getWindow().setAttributes(attrs);
                getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
            } else {
                WindowManager.LayoutParams attrs = getActivity().getWindow().getAttributes();
                attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
                attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
                getActivity().getWindow().setAttributes(attrs);
                getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
            }
        }
    }

    private class MyWebViewClient extends WebViewClient {
        private boolean mSuccess = true;

        @Override
        public void onPageFinished(final WebView view, final String url) {
            runTaskCallback(new Runnable() {
                public void run() {
                    if (getActivity() != null && mSuccess) {
                        showContent(500); // hide progress bar with delay to show webview content smoothly
                        showProgress(false);
                        if (WebViewAppConfig.ACTION_BAR_HTML_TITLE) {
                            ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(view.getTitle());
                        }
                        CookieSyncManager.getInstance().sync(); // save cookies
                    }
                    mSuccess = true;
                }
            });
        }

        @SuppressWarnings("deprecation")
        @Override
        public void onReceivedError(final WebView view, final int errorCode, final String description, final String failingUrl) {
            runTaskCallback(new Runnable() {
                public void run() {
                    if (getActivity() != null) {
                        mSuccess = false;
                        mStatefulLayout.showEmpty();
                        showProgress(false);
                    }
                }
            });
        }

        @TargetApi(Build.VERSION_CODES.M)
        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            // forward to deprecated method
            onReceivedError(view, error.getErrorCode(), error.getDescription().toString(), request.getUrl().toString());
        }

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

            if (DownloadFileUtility.isDownloadableFile(url)) {
                if (PermissionUtility.checkPermissionWriteExternalStorage(MainFragment.this)) {
                    Toast.makeText(getActivity(), R.string.main_downloading, Toast.LENGTH_LONG).show();
                    DownloadUtility.downloadFile(getActivity(), url, DownloadFileUtility.getFileName(url));
                    return true;
                }
                return true;
            } else if (url != null && (url.startsWith("http://") || url.startsWith("https://"))) {
                // load url listener
                ((LoadUrlListener) getActivity()).onLoadUrl(url);

                // determine for opening the link externally or internally
                boolean external = isLinkExternal(url);
                boolean internal = isLinkInternal(url);
                if (!external && !internal) {
                    external = WebViewAppConfig.OPEN_LINKS_IN_EXTERNAL_BROWSER;
                }

                // open the link
                if (external) {
                    IntentUtility.startWebActivity(getContext(), url);
                    return true;
                } else {
                    showProgress(true);
                    return false;
                }
            } else if (url != null && url.startsWith("file://")) {
                // load url listener
                ((LoadUrlListener) getActivity()).onLoadUrl(url);
                return false;
            } else {
                return IntentUtility.startIntentActivity(getContext(), url);
            }
        }
    }
}
公共类MainFragment扩展TaskFragment实现SwipeRefreshLayout.OnRefreshListener、AdvancedWebView.Listener{
私有静态最终字符串参数\u URL=“URL”;
私有静态最终字符串参数\u SHARE=“SHARE”;
私有静态最终整型请求文件选择器=1;
私有布尔mProgress=false;
私人视图mRootView;
private StateFullLayout MStateFullLayout;
私有AdvancedWebView mWebView;
私有字符串mUrl=“关于:空白”;
私有字符串共享;
私有布尔多局部=false;
私有值回调mFilePathCallback4;
私有值回调mFilePathCallback5;
私有int mStoredActivityRequestCode;
私有int mStoredActivityResultCode;
私人意图MStoredactivityResultantent;
公共静态MainFragment newInstance(字符串url、字符串共享){
MainFragment=新的MainFragment();
//论据
Bundle参数=新Bundle();
参数putString(参数URL,URL);
参数.putString(参数共享,共享);
fragment.setArguments(参数);
返回片段;
}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
setRetainInstance(真);
//处理片段参数
Bundle arguments=getArguments();
if(参数!=null){
手工学习(论点);
}
}
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){
int layout=WebViewAppConfig.PULL_TO_REFRESH==PullToRefreshMode.DISABLED?R.layout.fragment_main:R.layout.fragment_main_swipable;
mRootView=充气机。充气(布局、容器、假);
mWebView=mRootView.findViewById(R.id.main\u webview);
返回mRootView;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//恢复webview状态
如果(savedInstanceState!=null){
mWebView.restoreState(savedInstanceState);
}
//设置webview
setupView();
//拉动刷新
setupSwipeRefreshLayout();
//设置有状态布局
setupStatefulLayout(savedInstanceState);
//加载数据
if(mStatefulLayout.getState()==StatefulLayout.EMPTY)loadData();
//进度弹出窗口
显示进度(mProgress);
//检查权限
if(WebViewAppConfig.GEOLOCATION){
PermissionUtility.checkPermissionAccessLocation(此);
}
}
@凌驾
public void onStart(){
super.onStart();
}
@凌驾
恢复时公开作废(){
super.onResume();
mWebView.onResume();
}
@凌驾
公共无效暂停(){
super.onPause();
mWebView.onPause();
}
@凌驾
公共void onStop(){
super.onStop();
}
@凌驾
公共无效onDestroyView(){
super.onDestroyView();
mRootView=null;
}
@凌驾
公共空间{
super.ondestory();
mWebView.onDestroy();
}
@凌驾
公共无效连接(){
super.onDetach();
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图){
super.onActivityResult(请求代码、结果代码、意图);
if(PermissionUtility.checkPermissionReadExternalStorageAndCamera(此)){
//允许的
onActivityResult(请求代码、结果代码、意图);
}否则{
//不允许
mStoredActivityRequestCode=请求代码;
mStoredActivityResultCode=resultCode;
mStoredActivityResultIntent=意图;
}
//handleFilePickerActivityResult(requestCode、resultCode、intent);//未使用,改为使用高级webview
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
//保存当前实例状态
super.onSaveInstanceState(超出状态);
setUserVisibleHint(true);
//有状态布局状态
如果(mStatefulLayout!=null)mStatefulLayout.saveInstanceState(outState);
//保存webview状态
mWebView.saveState(超出状态);
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
//操作栏菜单
super.onCreateOptions菜单(菜单,充气机);
充气机。充气(右菜单。主菜单);
//显示或隐藏共享按钮
MenuItem share=menu.findItem(R.id.menu\u main\u share);
setVisible(mShare!=null&&!mShare.trim().equals(“”);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//动作栏菜单行为
开关(item.getItemId()){
案例R.id.菜单\u主\u共享:
startShareActivity(getContext()、getString(R.string.app_name)、getShareText(mShare));
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
开关(请求代码){
案例权限实用程序。请求权限读取外部存储和摄像头:
case PermissionUtility.REQUEST_PERMISSI