Android Studio将html5网址封装成APP

17,697次阅读
没有评论

共计 7885 个字符,预计需要花费 20 分钟才能阅读完成。

*/

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {

webview.goBack(); //goBack() 表示返回 WebView 的上一页面

return true;

}

return false;

}

}

4、在 AndroidManifest.xml 清单文件中,添加网络访问权限

5、使用签名打包生成 apk 文件的方法参考下面这篇文章

https://blog.csdn.net/qq15577969/article/details/109521414

二、WebView 的 WebSettings 的相关设置

WebSettings webSettings=webView.getSettings();

setAllowContentAccess (boolean allow)

是否允许在 WebView 中访问内容 URL(Content Url),默认允许。内容 Url 访问允许 WebView 从安装在系统中的内容提供者载入内容。

setAllowFileAccess (boolean allow)

是否允许访问文件,默认允许。注意,这里只是允许或禁止对文件系统的访问,Assets 和 resources 文件使用 file:///android_asset 和 file:///android_res 仍是可访问的。

setAllowFileAccessFromFileURLs (boolean flag)

是否允许运行在一个 URL 环境(the context of a file scheme URL)中的 JavaScript 访问来自其他 URL 环境的内容,为了保证安全,应该不允许。也请注意,这项设置只影响对 file schema 资源的 JavaScript 访问,其他形式的访问,例如来自图片 HTML 单元的访问不受影响。为了防止相同的域策略(same domain policy)对 ICE_CREAM_SANDWICH 以及更老机型的侵害,应该显式地设置此值为 false。

setAllowUniversalAccessFromFileURLs (boolean flag)

是否允许运行在一个 file schema URL 环境下的 JavaScript 访问来自其他任何来源的内容,包括其他 file schema URLs. 参见 setAllowFileAccessFromFileURLs(boolean),为了确保安全,应该设置为不允许,注意这项设置只影响对 file schema 资源的 JavaScript 访问,其他形式的访问,例如来自图片 HTML 单元的访问不受影响。为了防止相同的域策略(same domain policy)对 ICE_CREAM_SANDWICH 以及更老机型的侵害,应该显式地设置此值为 false。ICE_CREAM_SANDWICH_MR1 以及更老的版本此默认值为 true,JELLY_BEAN 以及更新版本此默认值为 false

setAppCacheEnabled (boolean flag)

应用缓存 API 是否可用,默认值 false, 结合 setAppCachePath(String) 使用。

setAppCachePath(String)

设置应用缓存文件的路径。为了让应用缓存 API 可用,此方法必须传入一个应用可写的路径。该方法只会执行一次,重复调用会被忽略。

setAppCacheMaxSize (long appCacheMaxSize)

已废弃。设置应用缓存内容的最大值。所传值会被近似为数据库支持的最近似值,因此这是一个指示值,而不是一个固定值。所传值若小于数据库大小不会让数据库调整大小。默认值是 MAX_VALUE,建议将默认值设置为最大值。

setBlockNetworkImage (boolean flag)

是否禁止从网络(通过 http 和 https URI schemes 访问的资源)下载图片资源,默认值为 false。注意,除非 getLoadsImagesAutomatically() 返回 true, 否则该方法无效。还请注意,即使此项设置为 false,使用 setBlockNetworkLoads(boolean) 禁止所有网络加载也会阻止网络图片的加载。当此项设置的值从 true 变为 false,WebView 当前显示的内容所引用的网络图片资源会自动获取。

setBlockNetworkLoads (boolean flag)

是否禁止从网络下载数据,如果 app 有 INTERNET 权限,默认值为 false,否则默认为 true。使用 setBlockNetworkImage(boolean) 只会禁止图片资源的加载。注意此值由 true 变为 false,当前 WebView 展示的内容所引用的网络资源不会自动加载,直到调用了重载。如果 APP 没有 INTERNET 权限,设置此值为 false 会抛出 SecurityException。

setBuiltInZoomControls (boolean enabled)

是否使用内置的缩放机制。内置的缩放机制包括屏幕上的缩放控件(浮于 WebView 内容之上)和缩放手势的运用。通过 setDisplayZoomControls(boolean) 可以控制是否显示这些控件,默认值为 false。

setCacheMode (int mode)

重写使用缓存的方式,默认值 LOAD_DEFAULT。缓存的使用方式基于导航类型,正常的页面加载,检测缓存,需要时缓存内容复现。导航返回时,内容不会复现,只有内容会从缓存盘中恢复。该方法允许客户端通过指定 LOAD_DEFAULT, LOAD_CACHE_ELSE_NETWORK, LOAD_NO_CACHE or LOAD_CACHE_ONLY 的其中一项来重写其行为。

setCursiveFontFamily (String font)

设置 WebView 字体库字体,默认“cursive”

setDatabaseEnabled (boolean flag)

数据库存储 API 是否可用,默认值 false。如何正确设置数据存储 API 参见 setDatabasePath(String)。该设置对同一进程中的所有 WebView 实例均有效。注意,只能在当前进程的任意 WebView 加载页面之前修改此项,因为此节点之后 WebView 的实现类可能会忽略该项设置的改变。

setDatabasePath (String databasePath)

已废弃,数据库路径由实现(implementation)管理,调用此方法无效。

设置数据库的存储路径,为了保证数据库正确运行,该方法必须使用一个应用可写的路径。此方法只能执行一次,重复调用会被忽略。

setDefaultFixedFontSize (int size)

设置默认固定的字体大小,默认为 16,可取值 1 到 72

setDefaultFontSize (int size)

设置默认的字体大小,默认 16,可取值 1 到 72

setDefaultTextEncodingName (String encoding)

设置默认的字符编码集,默认”UTF-8”.

setDefaultZoom (WebSettings.ZoomDensity zoom)

已废弃。设置默认的缩放密度,必须在 UI 线程调用,默认值 MEDIUM. 该项设置在新应用中不推荐使用。如果 WebView 用于展示手机页面,可以通过调整页面的’meta viewport’标记中的’width’和‘initial-scale’属性实现预期效果,对于漏用标记的页面,可以使用 setInitialScale(int) 和 setUseWideViewPort(boolean) .

setDisplayZoomControls (boolean enabled)

使用内置的缩放机制时是否展示缩放控件,默认值 true。参见 setBuiltInZoomControls(boolean).

setDomStorageEnabled (boolean flag)

DOM 存储 API 是否可用,默认 false。

setEnableSmoothTransition (boolean enable)

已废弃,将来会成为空操作(no-op),设置当 panning 或者缩放或者持有当前 WebView 的 window 没有焦点时是否允许其光滑过渡,若为 true,WebView 会选择一个性能最大化的解决方案。例如过渡时 WebView 的内容可能不更新。若为 false,WebView 会保持精度(fidelity),默认值 false。

setFantasyFontFamily (String font)

设置 fantasy 字体集(font family)的名字默认为“fantasy”

setFixedFontFamily (String font)

设置固定的字体集的名字,默认为”monospace”。

setGeolocationDatabasePath (String databasePath)

定位数据库的保存路径,为了确保定位权限和缓存位置的持久化,该方法应该传入一个应用可写的路径。

setGeolocationEnabled (boolean flag)

定位是否可用,默认为 true。请注意,为了确保定位 API 在 WebView 的页面中可用,必须遵守如下约定:

(1) app 必须有定位的权限,参见 ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION;

(2) app 必须提供 onGeolocationPermissionsShowPrompt(String, GeolocationPermissions.Callback) 回调方法的实现,在页面通过 JavaScript 定位 API 请求定位时接收通知。

作为可选项,可以在数据库中存储历史位置和 Web 初始权限,参见 setGeolocationDatabasePath(String).

setJavaScriptCanOpenWindowsAutomatically (boolean flag)

让 JavaScript 自动打开窗口,默认 false。适用于 JavaScript 方法 window.open()。

setJavaScriptEnabled (boolean flag)

设置 WebView 是否允许执行 JavaScript 脚本,默认 false,不允许。

setLayoutAlgorithm (WebSettings.LayoutAlgorithm l)

设置布局,会引起 WebView 的重新布局(relayout), 默认值 NARROW_COLUMNS

setLightTouchEnabled (boolean enabled)

已废弃。从 JELLY_BEAN 开始,该设置无效。允许使用轻触摸做出选择和光标悬停。

setLoadWithOverviewMode (boolean overview)

是否允许 WebView 度超出以概览的方式载入页面,默认 false。即缩小内容以适应屏幕宽度。该项设置在内容宽度超出 WebView 控件的宽度时生效,例如当 getUseWideViewPort() 返回 true 时。

setLoadsImagesAutomatically (boolean flag)

WebView 是否下载图片资源,默认为 true。注意,该方法控制所有图片的下载,包括使用 URI 嵌入的图片(使用 setBlockNetworkImage(boolean) 只控制使用网络 URI 的图片的下载)。如果该设置项的值由 false 变为 true,WebView 展示的内容所引用的所有的图片资源将自动下载。

setMediaPlaybackRequiresUserGesture (boolean require)

WebView 是否需要用户的手势进行媒体播放,默认值为 true。

setMinimumFontSize (int size)

设置最小的字号,默认为 8

setMinimumLogicalFontSize (int size)

设置最小的本地字号,默认为 8。

setMixedContentMode (int mode)

当一个安全的来源(origin)试图从一个不安全的来源加载资源时配置 WebView 的行为。默认情况下,KITKAT 及更低版本默认值为 MIXED_CONTENT_ALWAYS_ALLOW,LOLLIPOP 版本默认值 MIXED_CONTENT_NEVER_ALLOW,WebView 首选的最安全的操作模式为 MIXED_CONTENT_NEVER_ALLOW,不鼓励使用 MIXED_CONTENT_ALWAYS_ALLOW。

setNeedInitialFocus (boolean flag)

调用 requestFocus(int, Android.graphics.Rect) 时是否需要设置节点获取焦点,默认值为 true。

setOffscreenPreRaster (boolean enabled)

当 WebView 切换到后台但仍然与窗口关联时是否 raster tiles,打开它可以避免在 WebView 从后台切换到前台时重新绘制,默认值 false。在这种模式下后台的 WebView 占用更多的内存。请按如下准则显示内存的使用:

WebView 的尺寸不能比设备的屏幕尺寸更大;

限制在少数 WebView 上使用该模式;

在可见的 WebView 和即将显现的 WebView 上使用;

setPluginState (WebSettings.PluginState state)

在 API18 以上已废弃。未来将不支持插件,不要使用。告诉 WebView 启用、禁用或者有即用(on demand)的插件,即用模式是指如果存在一个可以处理嵌入内容的插件,会显示一个占位图标,点击时开启。默认值 OFF。

setRenderPriority (WebSettings.RenderPriority priority)

在 API18 以上已废弃。不建议调整线程优先级,未来版本不会支持这样做。设置绘制(Render,很多书上翻译成渲染,貌似很专业,但是不易懂,不敢苟同)线程的优先级。不像其他设置,同一进程中只需调用一次,默认值 NORMAL。

setSansSerifFontFamily (String font)

设置无衬线字体集(sans-serif font family)的名字。默认值”sans-serif”.

setSaveFormData (boolean save)

WebView 是否保存表单数据,默认值 true。

setSavePassword (boolean save)

API18 以上版本已废弃。未来版本将不支持保存 WebView 中的密码。设置 WebView 是否保存密码,默认 true。

setSerifFontFamily (String font)

设置衬线字体集(serif font family)的名字,默认“sans-serif”。

setStandardFontFamily (String font)

设置标准字体集的名字,默认值“sans-serif”。

setSupportMultipleWindows (boolean support)

设置 WebView 是否支持多窗口。如果设置为 true,主程序要实现 onCreateWindow(WebView, boolean, boolean, Message),默认 false。

setSupportZoom (boolean support)

WebView 是否支持使用屏幕上的缩放控件和手势进行缩放,默认值 true。设置 setBuiltInZoomControls(boolean) 可以使用特殊的缩放机制。该项设置不会影响 zoomIn() and zoomOut() 的缩放操作。

setTextSize (WebSettings.TextSize t)

API14 版本以上已废弃。请取代使用 setTextZoom(int)。设置页面文本的尺寸,默认 NORMAL。

setTextZoom (int textZoom)

设置页面上的文本缩放百分比,默认 100。

setUseWideViewPort (boolean use)

WebView 是否支持 HTML 的“viewport”标签或者使用 wide viewport。设置值为 true 时,布局的宽度总是与 WebView 控件上的设备无关像素(device-dependent pixels)宽度一致。当值为 true 且页面包含 viewport 标记,将使用标签指定的宽度。如果页面不包含标签或者标签没有提供宽度,那就使用 wide viewport。

setUserAgentString (String ua)

设置 WebView 的用户代理字符串。如果字符串为 null 或者 empty,将使用系统默认值。注意从 KITKAT 版本开始,加载网页时改变用户代理会让 WebView 再次初始化加载。

supportMultipleWindows ()

获取 WebView 是否支持多窗口的值。

supportZoom ()

获取 WebView 是否支持缩放的值

三、bug 解决

1、部分手机无法打开网页,报错 net::ERR_CLEARTEXT_NOT_PERMITTED,如下:

Android Studio 将 html5 网址封装成 APP

2、原因分析:

WebView 在 Android 8.0 以下都是可以正常打开链接的,但从 Android 9.0(API 级别 28)开始,默认情况下禁用明文支持,因此 http 的 url 均无法在 webview 中正常加载!

3、解决方法:

在 AndroidManifest.xml 清单文件中,application 节点添加如下配置即可

android:usesCleartextTraffic=“true”

android:allowBackup=“true”

android:icon=“@mipmap/ic_launcher”

android:label=“@string/app_name”

android:roundIcon=“@mipmap/ic_launcher_round”

android:supportsRtl=“true”

最后

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了 PDF 文档

Android Studio 将 html5 网址封装成 APP

Android Studio 将 html5 网址封装成 APP

喜欢的朋友可以关注、转发、点赞 感谢!

参考 docs.qq.com/doc/DSkNLaERkbnFoS0ZF
d:usesCleartextTraffic=“true”

android:allowBackup=“true”

android:icon=“@mipmap/ic_launcher”

android:label=“@string/app_name”

android:roundIcon=“@mipmap/ic_launcher_round”

android:supportsRtl=“true”

最后

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了 PDF 文档

[外链图片转存中…(img-7EJHzMfM-1724297228385)]

[外链图片转存中…(img-QISPQyFF-1724297228385)]

喜欢的朋友可以关注、转发、点赞 感谢!

参考 docs.qq.com/doc/DSkNLaERkbnFoS0ZF

原文地址: Android Studio 将 html5 网址封装成 APP

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-30发表,共计7885字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)