制作一个骨关节炎SI-613APP从代码算法上怎么实现
2020-04-24 11:02
525 查看
1,通过手机网页实现运行APP功能,有就运行APP这个功能,没有就去下载APP
下面是安卓代码配置。其实scheme和host要和js这边统一
<span style="font-size:18px;"><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="qiyimobile" android:host="self/qiyi.madeindexpage" android:pathPrefix="/**"> </data> </intent-filter></span>
js这边稍微麻烦一些。如果只拉起app比较简单,直接通过a连接或者window.location.href=“**”即可。不过这里有个问题,就是有些手机在未安装app的时候会识别我们之前定的那个协议尝试打开这个网页,当然会报找不到网页。这里用iframe的方式兼容性稍好。
var ifr = document.createElement('iframe'); ifr.src = 'qiyimobile://self/qiyi.madeindexpage'; document.body.appendChild(ifr);
当手机未安装app时应该跳转到下载页,很多人说延时一下直接跳转就行,如下
window.location.href=“打开地址” setTimeout(function() { window.location.href=“下载地址” }, 500);
设置一个初始时间,打开拉起app地址后有个结束时间,计算两者之差,当差大于一定时间是说明安装了app,当差很小时说明没有打开app,需要跳转到下载页。
最终代码如下
downloadapp.addEventListener('click', function() { var start = new Date();//记录初始时间 var t = 500; var ifr = document.createElement('iframe'); ifr.src = 'qiyimobile://self/qiyi.madeindexpage';//打开app document.body.appendChild(ifr); ifr.onload = function() { }; ifr.style.display='none'; setTimeout(function() { document.body.removeChild(ifr); var end = new Date();//记录结束时间 console.log(end - start) if (end - start <= (t + 30)) {//两者之差小于30ms时跳转到下载页 window.location.href = "https://www.baidu.com" } }, t); })
2,在H5页面里触发链接跳转,App Webview检测到链接跳转再进行拦截,因此可以通过URL上携带参数来告知App下一步应该做些什么。
import React, { Component } from "react"; export default class App extends Component { componentDidMount() { location.href = "lsbox://toast?msg=页面加载完毕"; // 通知App } render() { return ( <button type="button" onclick="{this.openMask.bind(this)}">点它</button> ); } openMask() { location.href = "lsbox://mask?toggle=1"; // 通知App } }
3,注入一些全局方法,App Webview直接操作全局方法来控制H5页面,使用window.handleFunc = function() {}这样的形式来定义注入的方法。
import React, { Component } from "react"; export default class App extends Component { constructor(props) { super(props); this.state = { list: [0, 1, 2, 3, 4] }; } componentDidMount() { window.addNum = this.addNum.bind(this); // 暴露方法给App } render() { return ( <ul>{this.state.list.map(v => <li key="{v}">{v}</li>)}</ul> ; ); } addNum(num) { this.setState(prevState => ({ list: prevState.list.concat(num); })); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 给大家推荐一个LRU实现算法的java 代码
- LK光流算法中是怎么使用金字塔的(就一个截图,大概明白点就行,毕竟有函数不必自己实现)
- C语言对堆排序一个算法思路和实现代码
- 利用面向对象的思想实现一套代码,要求一个APP支持微信支付,支付宝支付,银联支付
- 分享实现类似QQ的自动登陆的方法,代码比较简单,主要是给大家提供一个实现逻辑,具体的要结合自身的app来做
- 一个简单的导弹自动追踪以及实时图片旋转算法,Python-pygame代码实现
- (C语言) 怎么用代码实现一个学生成绩管理系统
- 最近做一个安卓的手机APP项目涉及到手机号注册登录,怎么实现
- 用MFC实现的一个简单的photoshop软件的制作代码
- 推荐一个项目:数据结构和算法必知必会的 50 个代码实现
- 求助 小程序怎么实现一个视频播放的时候,其他视频停止播放;下面的代码好像只支持两个视频的暂停
- HBuilder的扩展插件开发暴露了一个事实:其实不能实现写一次代码实现跨平台App生成
- 如何将算法翻译成代码,软件设计实践,一个B Plus Tree算法实现(未完待续)
- 一个实现了APP内部集中式通知中心,简化通知管理,简化代码逻辑和debug
- 一个功能,两个平台,三种语言 -(iOS,Swift,Android)App代码实现对比篇
- 怎么通过代码在一个App当中启动另一个App
- 将前缀和后缀相同的文件移动到同一个目录的算法设计及C代码实现
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- 推荐一个项目:数据结构和算法必知必会的 50 个代码实现
- 有一堆扑克牌,其中某张牌的张数超过了扑克牌总数的一半,请找到这张牌。写出算法思路、代码实现和算法的时间复杂度,要求算法尽可能高效。假设给定一个扑克牌的数组poker和它的大小n,请返回所求的扑克牌。