Android 开发-webview实现打开本地页面及交互

5 篇文章 0 订阅
订阅专栏

<上一篇  创建app

上一篇我们创建了个简单的app,接下来,我们用webview打开一个本地html页面,并做相关的交互。

1、首先,我们先创建一个新的activity用来全屏显示webview连接的html页面。

新建activity
生成新activity

生成过程中会自动在AndroidManifest.xml配置上添加activity配置。并在res/layout文件夹下创建对应的view文件,如下图所示

2、接下来我们在新的activity上加一个webview控件

添加webview控件

3、在对应的activity页面添加控件定义

添加绑定webview,默认加载一个本地页面

 

4、添加一个本地html页面

添加assets资源文件夹
选择默认文件夹路径

添加html本地页面

5、编辑新Activity(ViewActivity)页面。

view添加webview控件
 <WebView
        android:id="@+id/wv_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

 />

接下来对webview进行控制,在ViewActivity中进行代码操作

package com.example.demo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class ViewActivity extends AppCompatActivity {
    private WebView mWebView;
    private  final int hand_js_doJsFunction = 1;

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

        IniteWebView();
    }
    //绑定webview配置及加载本地页面
    private void IniteWebView(){
        mWebView = (WebView) findViewById(R.id.wv_content);

        WebSettings settings = mWebView.getSettings();
        //允许js交互
        settings.setJavaScriptEnabled(true);

        mWebView.loadUrl( "file:///android_asset/test.html");//本地文件
        //mWebView.loadUrl( "www.baidu.com");//网络文件

        //定义给页面js调用app的方法
        mWebView.addJavascriptInterface(appToJsObject, "AndroidJS");

    }


    //== webview 与js交互=========================
    //定义提供html页面调用的方法
    public final Object appToJsObject = new Object() {

        @JavascriptInterface
        public void GetAppInfo() {//获取app信息
            String appInfo =  getAppInfo();

            doJsFunction("backInfo('"+appInfo+"')");
        }
    };
    //定义公共方法调用页面js方法
    public void doJsFunction(String _url)
    {

        Message msg = new Message();
        msg.what = hand_js_doJsFunction;
        Bundle bundle = new Bundle();
        bundle.putString("url",_url);  //往Bundle中存放数据
        msg.setData(bundle);//mes利用Bundle传递数据
        handler.sendMessage(msg);//用activity中的handler发送消息

    }
    //用handler访问让方法在主进程内处理
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {

            String[] args = (String[]) msg.obj;

            switch (msg.what) {

                case hand_js_doJsFunction:
                    // String str1 = msg.getData().getString("url");//接受msg传递过来的参数
                    //调用页面js方法
                    mWebView.loadUrl("javascript:"+msg.getData().getString("url"));
                    break;

                default:
                    break;

            }

        }
    };

    //获取应用信息
    public  String getAppInfo() {
        String info = "";
        try {
            Context mContext = getApplicationContext();
            PackageManager packageManager = mContext.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(mContext.getPackageName(), 0);
            info += "版本号:" + packageInfo.versionName + "\n";
            info += "包  名:" + packageInfo.packageName + "\n";


        } catch (Exception e) {
            e.printStackTrace();
        }
        return info;
    }

}

对应的test.html页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <title></title>

    <script src="js/jquery.min.js"></script>
</head>
<body>
<p>webviewer交互</p>
<br />
<input type="button" id="btn1" value="查看app信息" onclick="UploadFiles()" />
<p id="detail">
</p>
</body>

<script type="text/javascript">

    $(function () {
        $("#btn1").on("click", function (e) {
			var _info =  window.AndroidJS.GetAppInfo();
			$("#detail").html("开始请求app信息...\n");

        });
    })

	function backInfo(str) {
		var _html = $("#detail").html() + "\n";
		_html += str;
		$("#detail").html( _html);
	}

</script>
</html>

6、在MainActivity中添加按钮跳转方法

前端页面activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnLink"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开本地页面"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/hello">

    </Button>

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity 页面

package com.example.demo;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

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

        //添加按钮事件
        Button btn_link = findViewById(R.id.btnLink);

        btn_link.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //打开webview active
                Intent intent = new Intent(MainActivity.this, ViewActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
               // finish();
            }
        });
    }
}

7、运行app

创建并运行模拟器(如果有则直接运行)

选择模拟器分辨率..
选择一个sdk,不存在的话就重新下载
下载完成后重新选择,点击Next
点击finish完成模拟器创建
启动模拟器
模拟器启动后,选择该模拟器,启动app
启动成功,可在模拟器查看app功能

 

主要代码在上面已经都有了,整个工程放在下面的下载地址。设置的是0分,不过现在csnd有时候会自动改,也是醉了。

demo下载 

Android WebView加载本地的网页源码显示
03-28
鄙人不才,献丑了,很简单的东西,提供给需要源码的人
android webview打开本地html
简公子的博客
04-24 5408
打开本地html // 首先切换android studio的项目视图,以project的方式显示,然后找到main文件夹,右击main ---> new ---> folder ---> assets folder,新建成功之后,将html文件放到 assets文件夹下即可;需要加载它时,只需以下代码: webView.loadUrl("file:////a...
小程序web-view无法打开页面的解决方法
最新发布
我是小鹏呀的博客
06-28 2709
把文件给后端,后端部署服务器,部署完后,可以直接访问该文件。例如:业务域名为https://baidu.com,下载下来的文件名为test.txt,后端部署完成后,可以确保https://baidu.com/test.txt可以访问。问题:开发者工具可以正常打开,正式上线版小程序使用 web-view 组件测试时提示:“无法打开页面,不支持打开。解决方法:需要配置业务业务域名,在微信公众平台-开发-开发管理-业务域名。,请在“小程序右上角更多->反馈与投诉”中和开发者反馈。
修改android系统webview实现的方式,适用于兼容或者安全性测试。
深夜听表
05-20 1万+
开端 虽然chrome已经占有了80%以上的市场份额,但也不排除出现一些不同版本的小兼容bug(比如这个超链接里的闪退例子)。 为了提前排除兼容问题或对于一些机型出现的bug我们需要复现时,为了模拟的比较一致有时候就要修改android系统webview实现方式。 操作方法 首先需要将你要添加的webview准备好 比如说以下几个ROM中常用包名 com.android.webview #很多aosp设备默认使用的,比如除手机之外的各种智能终端 com.google.android.webview
【原理篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview
徐公,微信公众号同名
09-20 1818
讲解之前,先简单说一下嵌套滑动的一些概念。(熟悉这个的哥们可以直接跳过这个)说到嵌套滑动,大家应该都不陌生。他是 Google 在 5.0 之后推出来的 NestedScroll 机制。可能初学者会有这样的疑问?想比较于传统的事件分发机制,NetstedScroll 机制有什么优点。在传统的事件分发机制 中,一旦某个 View 或者 ViewGroup 消费了事件,就很难将事件交给父 View 进行共同处理。而 NestedScrolling 机制很好地帮助我们解决了这一问题。
Android WebView使用(超详细用法)
热门推荐
weixin_40438421的博客
01-03 13万+
1.1 WebView概述    Android WebViewAndroid平台上是一个特殊的View,它能用来显示网页,这个WebView类可以被用来在app中仅仅显示一张在线的网页,当然还可以用来开发浏览器。 WebView内部实现是采用渲染引擎(WebKit)来展示view的内容,提供网页前进后退、网页放大、缩小、搜索等功能。 WebView是一个基于WebKit引擎、展现Web页...
WebView功能详解
weixin_43004856的博客
04-10 2490
Android WebViewAndroid平台上是一个特殊的View,它能用来显示网页,这个WebView类可以被用来在app中仅仅显示一张在线的网页,当然还可以用来开发浏览器。WebView内部实现是采用渲染引擎(WebKit)来展示view的内容,提供网页前进后退、网页放大、缩小、搜索等功能。WebView是一个基于WebKit引擎、展现Web页面的控件,AndroidWebView在低版本和高版本采用了不同的WebKit版本内核。回到顶部。
华为VS谷歌:万物互联,谁主沉浮?
老猿Python
06-08 5817
HarmonyOS 和 FuchsiaOS 在当前安卓生态环境下,目前在手机领域只有通过安卓虚拟机兼容安卓应用来完成自己的艰难启程,在安卓继续使用的情况下,二者都还需要走过较长的艰难时光,在物联网领域则机会更多一些,整个社会对物联网的重视能给二者带来突破重围的有力支持,同时正是由于二者都布局物联网领域,也说明物联网操作系统非常大概率是个正确方向。 总体来说,HarmonyOS 整体稍走在前面,但 FuchsiaOS 也可能厚积薄发。鹿死谁手、还是共同竞争成长抑或都被淘汰?
Android编程实现使用webView打开本地html文件的方法
08-31
这篇教程将详细讲解如何在Android使用WebView打开本地存储的HTML文件。 首先,我们需要在XML布局文件中添加一个WebView组件。在XML布局文件(例如activity_main.xml)中,你可以这样定义一个WebView: ```xml ...
Android应用开发-WebView控件.pptx
12-10
WebView控件在Android应用开发中扮演着重要角色,它不仅能够方便地集成网页内容,还能通过JavaScript交互实现更丰富的功能。然而,正确配置和使用WebView需要注意安全性和性能优化,以提供更好的用户体验。通过深入...
android studio使用NanoHTTPD 创建 http 服务器打开html并使用webView打开页面
07-22
Android开发中,有时我们需要在应用内部展示网页内容或者实现简单的本地服务器功能,这就涉及到`Android Studio`、`NanoHTTPD`以及`WebView`的综合使用。本篇将详细讲解如何利用`Android Studio`集成`NanoHTTPD`来...
Android 基于x5Webview 浏览文件 office文档
03-23
Android开发中,为了提供用户友好的体验,有时我们需要在应用程序内部查看和处理Office文档,如Word、Excel或PowerPoint。X5WebView是腾讯QQ浏览器团队开源的一个高性能、跨平台的WebView组件,它基于Chromium内核...
android java和webview交互demo
08-27
Android开发中,Java与WebView交互是一个常见且重要的任务,尤其在构建混合式移动应用时。本示例,"android java和webview交互demo",着重讲解如何通过Java代码控制WebView加载网页,并实现Java与JavaScript之间...
Android Studio笔记之webview ——实现app本身打开网页而不跳转到其他浏览器(内置浏览器)
qq_43398404的博客
10-24 6995
Android Studio笔记之webview 基本语法 实战演练 1.加载本地html 项目结构 注意路径写法 2.加载网络html 解决点击页面内链接提示打开浏览器问题 解决返回键退出activity问题 解决加载时进度条以及标题功能 使用js实现弹窗 以上对应的代码:** ...
安卓WebView使用
qq_40364278的博客
06-30 1万+
WebViewAndroid中的原生UI控件,主要用于在app应用中方便地访问远程网页或本地html资源。同时,WebView也在Android中充当Java代码和JS代码之间交互的桥梁。实际上,也可以将WebView看做一个功能最小化的浏览器。
Android WebView浏览器组件 用WebView实现加载网页
xqiuqiu_的博客
05-10 2243
什么是WebView WebViewAndroid中UI组件的一种 WebView基于Webkit内核(Chromium) WebView的用处 WebView可以用来展示网页,并且与网页进行交互 加载网页的四种方式 loadUrl(String url) loadUrl(Strig url,Map<String,String> additionalHttpHeaders) loadData(String data,String mimeType,String encoding)
WebView实现的大致步骤
GuoYue_csdn的博客
09-05 986
webView实现步骤:下面是本人做的一个WebView的一个Demo,布局是这样的: 整体的布局使用LinearLayout,方向为垂直,大致需要三个控件,EditText,Button和WebView;最上方为EditText定义一个singleLine=true使EditText控件处于水平单行,再往下面添加一个进度条,进度条中有三个比较重要的属性: style="@sty
AndroidAndroid利用WebView打开指定网址
rong11417的博客
02-05 4120
Android利用WebView打开指定网址 WebView组件的详细方法 WebView组件详解 步骤 1.AndroidMainFest.xml 设置网络权限 将 <uses-permission android:name="android.permission.INTERNET"/> 添加到AndroidMainFest.xml中 <?xml ...
Android的权限permission
weixin_30555753的博客
08-22 642
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission>允许读写访问"properties"表在checkin数据库中,改值可以修改上传 <uses-permission android:name="android.pe...
android webview加载本地pdf,如何在Android中的WebView打开本地PDF文件?
05-13
要在Android中的WebView打开本地的PDF文件,可以使用Google的PDF Viewer应用程序。以下是一些步骤: 1. 确保你的设备上已经安装了Google PDF Viewer应用程序,如果没有,可以在Google Play商店中下载安装。 2. 将本地的PDF文件复制到你的应用程序的assets文件夹中。 3. 在你的WebView中加载本地HTML文件,并在HTML文件中嵌入一个指向本地PDF文件的链接。例如: ``` <a href="file:///android_asset/myfile.pdf">View PDF</a> ``` 4. 在你的WebViewClient中重写shouldOverrideUrlLoading方法,处理PDF文件的链接。例如: ``` webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.endsWith(".pdf")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "application/pdf"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); try { startActivity(intent); } catch (ActivityNotFoundException e) { // Handle exception } return true; } return super.shouldOverrideUrlLoading(view, url); } }); ``` 这将在用户点击PDF链接时启动Google PDF Viewer应用程序,并在其中打开PDF文件。
写文章

热门文章

  • Wdatepicker日期控件的使用指南 228578
  • 正则表达式之分组捕获、条件表达式、平衡组 24268
  • JavaScript访问数据库 13446
  • Android的minSdkVersion,targetSdkVersion,maxSdkVersion 12597
  • IIS添加MIME扩展类型及常用的MIME类型列表 11975

分类专栏

  • electron 5篇
  • web前端
  • Android开发-从零开始 5篇
  • .nercore 笔记 2篇
  • 正则表达式 4篇
  • javascript 19篇
  • 控件 6篇
  • c
  • c#字符串处理 2篇
  • sql 4篇
  • jQuery.Validate 2篇
  • JFreechart 1篇
  • Installshield 打包 3篇
  • datetime 1篇
  • .net 14篇
  • winform 7篇
  • 文件操作 1篇
  • java 1篇
  • eclipse 1篇
  • java myeclipse 1篇
  • Android -配置 5篇
  • Android 文件 2篇
  • Android -开发 18篇
  • Android疑难杂症 9篇
  • Android -开发-ImageView 1篇
  • c#处理 1篇
  • IIS部署 2篇

最新评论

  • winform 显示控件层级关系

    Murasame-: Thanks for your helping

  • electron -autoUpdater 更新及热更新

    weixin_37400495: EAU 如果没有服务器的api 自己写一个json 怎么使用

  • electron -autoUpdater 更新及热更新

    男人就是要快: asar文件是前端资源文件,更新后不用重新安装程序,全部更新要重装,就这一点区别

  • electron -autoUpdater 更新及热更新

    男人就是要快: asar文件是前端资源文件,更新后不用重新安装程序,全部更新要重装,就这一点区别

  • nodejs/electron 解压加密zip 压缩包方法

    weixin_58240913: 解压后文件夹空的表情包

大家在看

  • ZooKeeper存储类型
  • express智慧房产交易系统-计算机毕业设计源码75482 377
  • 【STM32项目】在FreeRtos背景下的实战项目的实现过程(二) 2083
  • 微信公众号开发|被动消息回复 25
  • 观存储历史,论数据未来 3511

最新文章

  • android装载多个TextView并自动换行
  • electron 注册表实现 自定义文件类型打开方式
  • electron -环境踩坑记录
2022年1篇
2021年11篇
2020年6篇
2019年2篇
2018年3篇
2017年7篇
2016年9篇
2015年14篇
2014年1篇
2013年16篇
2012年35篇
2011年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码鞍山网站优化公司普陀区百度网站优化公司关于关键词优化网站龙口功能性网站优化公司册亨网站关键词优化网站优化 天佩营销南湖网站优化方式有哪些宁德市网站seo优化公司价格低服务行业网站优化丰台网站优化关键词网站优化代码优湖北网站推广优化开发商丘网站优化哪家价格便宜十堰低成本网站优化哪里好外贸网站优化接任务昌乐网站优化方式安丘网站优化怎么样2021优化方案答案网站数学网站优化竞争对手分析佛山网站排名优化策划苏州网站优化最专业优化外链对网站有什么影响企业网站推广优化自贡企业网站优化费用江苏网站优化在哪里优化网站排名哪里实惠厦门网站建设网站优化网站优化首选零芯互联网站团队阜阳网站首页优化多少钱延庆网站优化的公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化