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

简单来说的话,网页是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. 混入 - Mixins

    混入(mixins)是一种分发Vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 混入分为:全局和局部 定义全局混 ...

  2. Lucene demo演示搜索查询歌手,歌名,歌词

    1.导入pom jar文件 <dependency> <groupId>org.apache.lucene</groupId> <artifactId> ...

  3. C#.Net筑基-集合知识全解

    01.集合基础知识 .Net 中提供了一系列的管理对象集合的类型,数组.可变列表.字典等.从类型安全上集合分为两类,泛型集合 和 非泛型集合,传统的非泛型集合存储为Object,需要类型转.而泛型集合 ...

  4. 洛谷 P1226 快速幂

    题目链接:快速幂 思路 简单快速幂模板.a ^ 17 = (a ^ 2) ^ 8 * a,此时pow()中的y就可以视为17 -> 8(y >>= 1),pow()中的x就是底数a ...

  5. ZYNQ:使用PetaLinux打包 BOOT.BIN、image.ub

    说明 个人还是比较喜欢灵活去管理各个部分的源码. 有关文章: ZYNQ:PetaLinux提取Linux和UBoot配置.源码 编译Linux 取得Linux源代码和配置后,可以在其中执行make,编 ...

  6. 开发一个微信小程序流程及需要多少费用?

    流程如下: 小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 开放注册范围:个人 企业 政府 媒体 其他组织 1.注册 在微信公 ...

  7. Mysql的Innodb和MyISAM引擎的区别

    区别项 Innodb MyISAM  事务  支持  不支持 锁粒度  行锁,适合高并发 表锁,不适合高并发  是否默认  默认  非默认  支持外键  支持外键  不支持  适合场景  读写均衡,写 ...

  8. 前端开发-- Webpack 代码分割和懒加载技术

    在现代前端开发中,优化应用性能是一个至关重要的任务.Webpack 作为一个强大的打包工具,为我们提供了代码分割和懒加载的功能,可以显著提升应用的加载速度和用户体验.本文将深入解析 Webpack 的 ...

  9. 「Pygors跨平台GUI」1:Pygors跨平台GUI应用研究

    「Pygors系列」一句话导读: Python.Go.Rust.C程序跨平台GUI框架研究. 一.问题 Pygors是什么? Pygors是我自己创造的一个词,就是Python.Go.Rust.C四种 ...

  10. 2024秋招字节跳动朝夕光年UE4客户端开发实习生岗笔试题目

    20240117更新 2024年秋招笔试题目,没想到时隔几个月字节跳动游戏业务就要寄了,本文仅供参考,请大佬多多指教 Q1字符串处理 Q2 杯子问题 桌子上有4109+1个饮料杯,这些饮料杯的编号依次 ...