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

简单来说的话,网页是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. 无需搭建环境,零门槛带你体验Open-Sora文生视频应用

    本文分享自华为云社区<Open-Sora 文生视频原来在AI Gallery上也能体验了>,作者:码上开花_Lancer. 体验链接:Open-Sora 文生视频案例体验 不久前,Open ...

  2. redux中集成immutable.js

    安装redux-immutable redux中利用combineReducers来合并reducer并初始化state,redux自带的combineReducers只支持state是原生js形式的 ...

  3. java springboot 指定运行端口

    java springboot 指定运行端口 方法1: 修改源代码里的"\src\main\resources\application.properties" 文件,增加或修改 s ...

  4. C#开发的目录图标更改器 - 开源研究系列文章 - 个人小作品

    因为有一些项目保存在文件夹里,然后想着用不同的图标来显示该文件夹,但是Windows提供的那个修改文件夹的操作太麻烦,需要的操作太多(文件夹里鼠标右键,属性,自定义,更改图标,选择文件,选择图标,点击 ...

  5. (四)基于multiprocessing.dummy线程池爬取梨视频的视频信息

    功能:爬取梨视频科技栏最热的几个视频.  1. 找到视频对应的通用标签 可以看出关于视频的信息都存放在li标签中 2. 拿到视频的名称以及对应的url 3.进入Video的url,找到视频信息的地址 ...

  6. MySQL插入中文数据时发生错误或者乱码的一些坑

    最近新入职的工作,火急火燎就下了个mysql,没想到安装时配置没弄好.今天在测试数据时,插入中文数据到mysql都是问号,先后查了半天修改表结构,数据库编码,my.ini文件都没有用. 首先第一步,打 ...

  7. Redis数据类型有哪些?

    a.String(字符串) b.Hash(hash表) c.List(链表) d.Set(集合) e.SortedSet(有序集合zset)

  8. 用 KV 缓存量化解锁长文本生成

    很高兴和大家分享 Hugging Face 的一项新功能: KV 缓存量化 ,它能够把你的语言模型的速度提升到一个新水平. 太长不看版: KV 缓存量化可在最小化对生成质量的影响的条件下,减少 LLM ...

  9. Xcode 配置账号

    Xcode 配置开发者账号 简介:在iOS 开发过程中,要打包到手机上是需要登陆账号和配置对应证书的. 配置账号 打开Xcode -> Preferences -> Accounts -& ...

  10. 制作Jdk镜像

    本文介绍用Dockerfile的方式构建Jdk镜像,请保证安装了Docker环境. 首先创建/opt/jdk目录,后续步骤都在该目录下进行操作. 准备好Jdk安装文件,放到/opt/jdk目录下. 编 ...