Android Studio在WebView中编译Web应用

Posted @时倾673

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio在WebView中编译Web应用相关的知识,希望对你有一定的参考价值。

前言:

         如果想要在客户端中提供web应用,则可以使用 WebView 执行该操作。WebView 类是 android 的 View 类的扩展,可以将网页显示为 Activity 布局的一部分。它不会包含功能全面的网络浏览器的任何功能,例如导航控件或地址栏。WebView 默认只显示网页。

         在希望在应用中提供可能需要更新的信息,例如最终用户协议或用户指南。在 Android 应用中,你可以创建一个包含 WebView 的 Activity,然后使用它来显示在线托管的文档。

         另一种 WebView 情形是,如果你的应用向用户提供始终需要互联网连接才能检索数据的数据(例如电子邮件)。在这种情况下,你可能会发现相比于执行网络请求,然后解析数据并在 Android 布局中呈现数据,在 Android 应用中编译 WebView 以显示包含所有用户数据的网页更加轻松。你可以改为设计一个专为 Android 设备定制的网页,然后在加载该网页的 Android 应用中实现 WebView

  向应用中添加WebView

          要向应用中添加 WebView,可以在 Activity 布局中添加 <WebView> 元素,.要在布局中为应用添加 WebView, 将以下代码添加到 Activity 的布局 XML 文件中:

<WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />

要在 WebView 中加载网页,请使用 loadUrl()

WebView myWebView = (WebView) findViewById(R.id.webview);     myWebView.loadUrl("http://www.example.com");

在此之前,你的应用必须能够访问互联网。要获取互联网访问权限,请在你的清单文件中请求 INTERNET 权限。例如:

<manifest ... >
        <uses-permission android:name="android.permission.INTERNET" />
        ...
    </manifest>




代码插入位置如下:

 此外,还可以通过修改以下内容来自定义 WebView

使用 WebChromeClient 启用全屏支持。如果 WebView 需要权限以更改主机应用的界面(例如创建或关闭窗口以及向用户发送 javascript 对话框),也需要调用此类。

通过修改 WebSettings 来启用 JavaScript。

使用 JavaScript 访问已注入到 WebView 的 Android 框架对象。

编译调试

在WebView中使用javaScript

              如果你打算在 WebView 中加载的网页使用 JavaScript,则必须 启用 JavaScript。启用 JavaScript 后,你还还可以在应用代码和 JavaScript 代码之间创建接口。 

              启用JavaScript,JavaScript 在 WebView 中默认处于停用状态。你可以通过附加到 WebView 的 WebSettings 启用 JavaScript。您也可以使用 getSettings() 检索 WebSettings,然后使用 setJavaScriptEnabled() 启用 JavaScript。

WebView myWebView = (WebView) findViewById(R.id.webview);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

WebSettings 提供对其他各种实用设置的访问权限。例如,如果你正在开发专为 Android 应用中的 WebView 设计的 Web 应用,则可以使用 setUserAgentString() 定义自定义用户代理字符串,然后在网页中查询自定义用户代理,以验证请求网页的客户端实际上是您的 Android 应用。

将 JavaScript 代码绑定到 Android 代码

在开发专为 Android 应用中的 WebView 设计的 Web 应用时,你还可以在 JavaScript 代码和客户端 Android 代码之间创建接口。你的 JavaScript 代码可以调用 Android 代码中的方法,要绑定 JavaScript 代码与 Android 代码之间的新接口,可以调用 addJavascriptInterface(),并传入类实例以绑定到 JavaScript 以及 JavaScript 可调用以访问类的接口名称。

public class WebAppInterface 
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) 
            mContext = c;
        

        /** Show a toast from the web page */
        @JavascriptInterface
        public void showToast(String toast) 
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        
    

你可以使用 addJavascriptInterface() 将此类绑定到在 WebView 中运行的 JavaScript,并为接口 Android 命名。

 WebView webView = (WebView) findViewById(R.id.webview);
 webView.addJavascriptInterface(new WebAppInterface(this), "Android");

这会为在 WebView 中运行的 JavaScript 创建名为 Android 的接口。此时,你的 Web 应用可以访问 WebAppInterface 类。无需从 JavaScript 初始化 Android 接口。WebView 会自动将其提供给你的网页。

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

    <script type="text/javascript">
        function showAndroidToast(toast) 
            Android.showToast(toast);
        
    </script>

处理网页导航

         当你在 WebView 中点击网页中的链接时,Android 的默认行为是启动处理网址的应用。默认网络浏览器通常会打开并加载目标网址。不过,你可以为 WebView 替换此行为,以便在 WebView 内打开链接。然后,你可以允许用户向后/向前浏览由你的 WebView 维护的网页历史记录。要打开用户点击的链接,可以使用 setWebViewClient() 为你的 WebView 提供 WebViewClient

 WebView myWebView = (WebView) findViewById(R.id.webview);    

myWebView.setWebViewClient(MyWebViewClient);

现在,用户点击的所有链接都会在你的 WebView 中加载。

 如果你希望更好地控制用户点击的链接的加载位置,可以创建自己的 WebViewClient 以替换 shouldOverrideUrlLoading() 方法。

private class MyWebViewClient extends WebViewClient 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
            if ("www.example.com".equals(Uri.parse(url).getHost())) 
                // This is my website, so do not override; let my WebView load the page
                return false;
            
            // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        
    

为 WebView 创建这一新 WebViewClient 的实例

WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.setWebViewClient(new MyWebViewClient());

当用户点击某个链接时,系统会调用 shouldOverrideUrlLoading(),会检查网址主机是否与特定网域匹配(如上所述)。如果匹配,则该方法会返回 false,以避免替换网址加载(它允许 WebView 像往常一样加载网址)。如果网址主机不匹配,则创建 Intent 以启动用于处理网址的默认 Activity(解析为用户的默认网络浏览器)。

当你的 WebView 替换网址加载时,它会自动累积已访问网页的历史记录。你可以使用 goBack() 和 goForward() 向后/向前浏览历史记录。

@Override
    public boolean onKeyDown
(int keyCode, KeyEvent event) 
        // Check if the key event was the Back button and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) 
            myWebView.goback();
            return true;
        
        // If it wasn't the Back key or there's no web page history, bubble up to the default
        // system behavior (probably exit the activity)
        return super.onKeyDown(keyCode, event);
    
    

如果存在用户要访问的网页历史记录,则 canGoBack() 方法会返回 true。同样,你可以使用 canGoForward() 检查是否存在向前历史记录。如果你不执行此检查,那么当用户浏览到历史记录的末尾时,goBack() 或 goForward() 将不执行任何操作。

fjnu 116052019040 陈晓东

原文链接:https://blog.csdn.net/m0_59413339/article/details/121894028

以上是关于Android Studio在WebView中编译Web应用的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - 如何在 webview Lollipop 中上传文件 (Android 5.0)

通过 WebView (Android Studio) 导航到时,Youtube 在应用程序中启动

android studio 无法解析 webview 等等

如何在 WebView Android Studio 中打开本地 pdf 文件

Android Studio:地理定位不起作用。无法在 Webview 中获取地理位置

android studio创建assets目录并且利用webView加载其html