文档章节

个人总结之H5调用本地app

Magic_锋
 Magic_锋
发布于 2016/04/21 15:01
字数 809
阅读 5720
收藏 6

  首先既然H5和本地app达到交互,所以得有个标识,通过这个标识来开启app ,这时候就需要我们app端在manifest中的入口activity中添加scheme,也就是类似标识是的,这时候网页端可以通过这个scheme来开启我们的app,但是如果想要给我们app传递参数的话,那么就不好使了,所以这时候还需要 添加host,就可以了,代码如下

           <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
            <intent-filter>
                 <action android:name="android.intent.action.VIEW" /> 
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="abcd"
                    android:host="hello"/>
            </intent-filter>

这样就可以了,H5就可以打开我们的app了,当然既然人家给我们传递了参数,那么我们这边肯定要获取的吧,所以我们可以在入口activity中如下操作,来获取参数

           Intent intent = getIntent();
            Uri uri = intent.getData();
            String scheme = intent.getScheme();
            
            tv_web.setVisibility(View.GONE);
            idnoH = uri.getQueryParameter("idno");
            System.out.println(idnoH+"idno");

这里的idno就是H5那么传递参数的key,通过key来获取value

 

       当然常用的还有使用webview来和js交互,这就很简单了, 首先我们要先对webview进行一些设置, 第一条很关键,true表示和js可以交互, false反之

WebSettings set = mWebView.getSettings();
		set.setJavaScriptEnabled(true);//设置是否直接javascript格式
		set.setDefaultZoom(ZoomDensity.MEDIUM); //----设置缩放级别
		set.setDefaultTextEncodingName("UTF-8");//---设置编码格式
		set.setAllowContentAccess(true);
		set.setAppCacheEnabled(false);
		set.setBuiltInZoomControls(false);
		set.setUseWideViewPort(true);
		set.setUseWideViewPort(true); 
		set.setLoadWithOverviewMode(true);

     1. 先说下,js调用Android中的方法

//第一个参数是 供给js调用的类,第二个参数是js中要用到的调用这个类中的方法的对象,可以随便起
mWebView.addJavascriptInterface(new FromAndroid(context), "AndroidToJs");

   说一下,这里的FromAndroid的这个类不能是内部类,不知为何,反正我先用的是内部类,是调不出来里面的方法,


/**
 * 这是js从android调用方法的类
 * @author Administrator
 *
 */
public class FromAndroid {
	Context context;
	public FromAndroid(Context context){
		this.context = context;
	}
	 @JavascriptInterface
	public void fromAndroid(String name){
		MyToastUtils.show(context, name);
	}
}

  在JS中代码就更简单了

function showToast(){
	AndroidToJs.fromAndroid("我是js调用android的吐司");
}

   完毕!!!

 2. 然后说下在Android中调用JS的方法

  在Android中的代码其实很简单

//这是调用js中的方法
 fragment7_btn.setOnClickListener(new OnClickListener() {
        @Override
	public void onClick(View v) {
	   mWebView.loadUrl("javascript:fromJS('嘎嘎')");
	}
});

  说明下, 这里fromJS()这个方法是JS中的方法名, 而里面的参数是android部分可以传给js的,然后就可以修改到网页中的内容,当然也可以不传,直接在js端写死了,android部分调用,直接显示就可以

 在JS端的代码

function fromJS(param) {
	alert(param);
	document.getElementById('fromJS').innerHTML="我是android调用JS的方法";
	showToast();
	document.getElementById('fromJS').innerHTML=param;
				
}

 这里的fromJS的这个ID其实就是一个div,为了就是直接显示出来,还如上面说的一样,如果不用android传参数,直接fromJS()这个方法中param就不用写,直接一个无参的方法,然后JS端这边类似"我是android调用的JS方法" 这样,写死就好了; 如果想用android传参,并显示,直接把param赋值给div就好了

 完毕!!!!

© 著作权归作者所有

Magic_锋
粉丝 0
博文 57
码字总数 34889
作品 0
东城
程序员
私信 提问
混合开发模式介绍

1. 开发模式介绍 利用原生+h5模式开发app也有一段时间了,写篇文章来介绍一下现在的开发模式。个人是目前团队中唯一的h5开发者,由于刚刚毕业半年接触前端也没有多久,很多也是自己摸索出来的...

2018/01/12
0
0
WebApp的Cordova之旅

前言 首先谈一下Cordova的相识,随着大前端的到来,越来越多的应用开始嵌套h5页面,既要保证了用户信息的及时性和业务更新的及时性,也要保证用户在操作的流畅体验。所以在开发hybirdApp的路...

Iam光星人
2017/06/06
0
0
如何打造一个高性能的Hybrid App

引言 在多元化的今天,一个热门的移动app,或多或少都会有内在H5在其中。而对于一个有很多运营场景的app来说,这种情况更常见了。试想一下,如果在一个公司,存在很多native和H5同时需要开发...

筱飞
2016/06/28
69
0
客户端内H5页面的首屏性能优化

写在前面 本文首发于微信公众号:符合预期的CoyPan 性能优化是前端开发中不可避免的一个话题。本文将记录一次客户端内H5页面首屏性能优化的项目。 背景介绍 信息流App是当下最流行的产品之一...

CoyPan
06/26
0
0
移动端本地 H5 秒开方案探索与实现

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 企业微信移动端项目中有需求要展示数据趋势的可视化图表,经过调研,最终决定以单页面 H5 来完成,对 APP 里的一些使用 H5 实现的...

腾讯云加社区
2018/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
8
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部