最近项目需要把安卓项目拉下来看了

简单来说的话,网页是HTML + CSS + JS 组成的,运行环境是浏览器上面

安卓APP应用是 Java + XML 组成的,运行环境是这个安卓系统中

构成结构

每一个Activity.xml 相当于一个页面 【也可以是一个组件片段】

Activity.xml 能够配置好布局,视图控件,样式这些东西,都在xml标签中标记好

对应JS动态控制是对应的一个Activity类,这个类来编写对Activity的控制

这个类一定会有这个onCreate生命周期

在这生命周期中将Activity.xml和类进行绑定:

    public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_keliu_layout);
init();
}

对于一般Java代码来说,这个R类应该可以在文件中找到,但是发现并没有

https://blog.csdn.net/weixin_43858561/article/details/88865836

R是一个安卓自动编译生成的一个类,类中的内容映射所有的Activity.xml,这个类是不可更改的

Activity类,需要监听事件,Web页面直接使用JS获取元素调用addEventListener入参一个函数即可

但是安卓这边就是以Java的方式来实现,首先这个类需要实现Listener接口,然后重写接口方法

看了下代码,这个入参的View是Activity.xml里面的一个标签空间,可以是按钮,输入框这样的

当点击了某一个东西的时候,把这个View对象入参

通过ID来判断是哪一个View对象被点击了

然后再执行对应的操作逻辑

这样一一对应的,ID在不同的Activity中可以名称重复,因为可以根据Activity的名称来下一级引用

好像安卓是id没有分Activity放在一起的,虽然说id是唯一的,但是引用的变量名称是一样的

请求交互

由于是Java代码编写开发,肯定需要Http协议通信的一套组件

这里看的是简单封装了些方法供调用,可能是ApacheHttpClient的底层

根据响应状态判断,成功在上面,失败就在下面

Webview访问

甲方天马行空的需求,要进行APP合并,所有APP都合并在一个APP中

现在情况是 应用A是安卓代码写的,应用B是H5页面,应用C又是Vue开发的

这边只能根据安卓这个API来实现,就是Webview控件,可以把资源向浏览器一样打开访问

这里展示的是功能跳转,在这个类中实现的Webview

先是onCreate生命周期,这里用方法封装了下,处理的内容太多了

在这里一段内容

这里就是我们应用B和应用C的目录

private final String ASSETPATH = "file:///android_asset/"

DMS系统需要交互的令牌和其他信息都只能通过URL传参的形式进行

这样就可以在安卓应用中访问这个内部的应用

同理在苹果应用也是类似的方式实现

安卓接口开放JS调用

在手机中这种方式,我们应用B 和C是浏览器方式操作的,对应移动端的一些底层硬件访问是有权限阻挡的

例如,访问手机系统的文件,打开照相机拍照返回照相文件,开启录音,等等这些

这种方式B和C是不能通过自身JS来调用,所以需要安卓应用开放接口给JS调用

例如手机拨号这个功能:

这是个自定义的一个内部类:

可以看到这些方法都注解了@JavaScriptInterface JS接口

    /**
* 自己写一个类,里面是提供给H5访问的方法
* */
public class JsInteration{
/**
* 注销系统
* @param val
*/
@JavascriptInterface//一定要写,不然H5调不到这个方法
public void exitSystem(String val) {
SuperLogUtils.e("网页传来传的值:", val);
exitTheSystem();
//return "我是java里的方法返回值";
} /**
* 打开外部浏览器进行浏览HTML
* @param url
*/
@JavascriptInterface
public void openHtml(String url){
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(url);
intent.setData(content_url);
startActivity(intent);
}
/**
* 拨打电话(跳转到拨号界面,用户手动点击拨打)
*
* @param phoneNum 电话号码
*/
@JavascriptInterface
public void callPhone(String phoneNum) {
SuperLogUtils.e("网页传来传的值phoneNum:", phoneNum);
Intent intent = new Intent(Intent.ACTION_DIAL);
Uri data = Uri.parse("tel:" +
phoneNum);
intent.setData(data);
startActivity(intent);
}

@JavascriptInterface
public Map<String,Object> htmlGetMapAddress(){
Map<String,Object> map = new HashMap<>();
map = getMapAddress();
if(map!=null){
return map;
}else{
map.put("msg","未获取到时实位置!!!");
return map;
}
}
@JavascriptInterface
public void getTakePhoto(){
File fileUri = new File(Environment.getExternalStorageDirectory().getPath() + "/" + SystemClock.currentThreadTimeMillis() + ".jpg");
imageUri = Uri.fromFile(fileUri);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
imageUri = FileProvider.getUriForFile(ServiceAppH5Activity.this, getPackageName() + ".fileprovider", fileUri);//通过FileProvider创建一个content类型的Uri
}
PhotoUtils.takePicture(ServiceAppH5Activity.this, imageUri, PHOTO_REQUEST);
}
}

这边H5的APP应用就是这样的写法调用安卓的:

【Android】看安卓代码的一点笔记的更多相关文章

  1. 阅读xtrabackup代码的一点笔记

    xtrabackup binary最重要的两个过程是backup和prepare,对应的函数分别是xtrabackup_backup_func()和xtrabackup_prepare_func(), ...

  2. 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术

    在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...

  3. 《Android第一行代码》笔记

    学习Android开发差点儿相同有两年时间了.期间也做了大大小小的一些项目.近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客.从中受益不少.于是花了近一周时间看完了郭神 ...

  4. 安卓Android科大讯飞语音识别代码使用详解

    科大讯飞的语音识别功能用在安卓代码中,我把语音识别写成了Service,然后在Fragment直接调用service服务.科大讯飞语音识别用的是带对话框的那个,直接调用科大讯飞的语音接口,代码采用链表 ...

  5. 〖Android〗OK6410a的Android HAL层代码编写笔记

    一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...

  6. 1.Android 视图及View绘制分析笔记之setContentView

    自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...

  7. Android程序员的Flutter学习笔记

    作为忠实与较资深的Android汪, 最近抽出了一些时间研究了一下Google的亲儿子Flutter, 尚属皮毛, 只能算是个简单的记录吧. Google自2017年第一次提出Flutter, 到20 ...

  8. Android Studio在代码重构中的妙用

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  9. 【Android】安卓四大组件之Activity(二)

    [Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...

  10. 【Android】安卓四大组件之Activity(一)

    [Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...

随机推荐

  1. k8s网络问题以及容器跨宿主机通信原理

    [0]资源配置文件 [root@mcwk8s03 mcwtest]# ls mcwdeploy.yaml [root@mcwk8s03 mcwtest]# cat mcwdeploy.yaml api ...

  2. CF1838A-Blackboard-List

    题意简述 在黑板上有两个数字,进行如下操作 \(n-2\) 次: 每次在黑板上选择任意两个数,将两个数的差的绝对值写在黑板上. 这样你会得到一个长度为 \(n (3 \le n \le 100)\) ...

  3. HDFS 常用操作命令

    HDFS 文件操作命令 注,其实常用命令不用网上搜,和linux下的命令很类似,触类旁通,直接在linux 上 hadoop fs 看一下就行了,不需要刻意去记 我把 linux 上的 help 列举 ...

  4. 高德地图查询结果返回INVALID_USER_IP错误解决

    高德地图查询结果返回INVALID_USER_IP错误解决 方法是添加白名单.IP白名单出错,发送请求的服务器IP不在IP白名单内开发者在LBS官网控制台设置的IP白名单不正确.白名单中未添加对应服务 ...

  5. AgileConfig-1.9.4 发布,支持 OpenTelemetry

    Hello 大家好,最新版的 AgileConfig 1.9.4 发布了.现在它可以通过 OpenTelemetry 对外提供 logs,traces,metrics 三个维度的数据.用户可以自由选择 ...

  6. 【原创】EtherCAT主站IgH解析(二)-- Linux/Windows/RTOS等多操作系统IgH EtherCAT主站移植指南

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 前言 目前,EtherCAT商用主站有:Aconti ...

  7. 08-Linux计划任务

    什么是计划任务 周期性或者定时执行某个命令或者脚本. crontab 安装 yum install crontabs #安装crontabs systemctl enable crond #开机启动 ...

  8. 2019徐州区域赛 ACEFM 题解 & pollard-rho & miller-rabin & 求出每个子树的重心 板子

    A. Cat 题目大意:你需要在 [L , R] 选取连续的一段,使得这一段的异或和小于给定的数 S. 请求出最长的长度. 做法:我们可以发现 \[(2k) \oplus (2k+1) = 1, (2 ...

  9. 使用 Spring 实现控制反转和依赖注入

    使用 Spring 实现控制反转和依赖注入 概述 在本文中,我们将介绍IoC(控制反转)和DI(依赖注入)的概念,以及如何在Spring框架中实现它们. 什么是控制反转? 控制反转是软件工程中的一个原 ...

  10. HarmonyOS SDK助力鸿蒙原生应用“易感知、易理解、易操作”

    6月21-23日,华为开发者大会(HDC 2024)盛大开幕.6月23日上午,<HarmonyOS开放能力,使能应用原生易用体验>分论坛成功举办,大会邀请了多位华为技术专家深度解读如何通过 ...