【Android】看安卓代码的一点笔记
最近项目需要把安卓项目拉下来看了
简单来说的话,网页是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】看安卓代码的一点笔记的更多相关文章
- 阅读xtrabackup代码的一点笔记
xtrabackup binary最重要的两个过程是backup和prepare,对应的函数分别是xtrabackup_backup_func()和xtrabackup_prepare_func(), ...
- 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术
在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...
- 《Android第一行代码》笔记
学习Android开发差点儿相同有两年时间了.期间也做了大大小小的一些项目.近来抽出闲暇想把Android基础强化一下,之前在网上看到了郭霖郭大神的几篇博客.从中受益不少.于是花了近一周时间看完了郭神 ...
- 安卓Android科大讯飞语音识别代码使用详解
科大讯飞的语音识别功能用在安卓代码中,我把语音识别写成了Service,然后在Fragment直接调用service服务.科大讯飞语音识别用的是带对话框的那个,直接调用科大讯飞的语音接口,代码采用链表 ...
- 〖Android〗OK6410a的Android HAL层代码编写笔记
一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...
- 1.Android 视图及View绘制分析笔记之setContentView
自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...
- Android程序员的Flutter学习笔记
作为忠实与较资深的Android汪, 最近抽出了一些时间研究了一下Google的亲儿子Flutter, 尚属皮毛, 只能算是个简单的记录吧. Google自2017年第一次提出Flutter, 到20 ...
- Android Studio在代码重构中的妙用
代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...
- 【Android】安卓四大组件之Activity(二)
[Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...
- 【Android】安卓四大组件之Activity(一)
[Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...
随机推荐
- RabbbitMQ RabbitListener使用IP动态队列 Attribute value must be constant
在RabbitMQ消息队列使用 @RabbitListener 接收消息,队列名称使用常量命名,但是如果使用动态队列名称,比如根据系统 ip 命名队列名称. 获取服务器 IP /** * 获取服务器i ...
- 红白机基本原理(二) CPU
CPU 首发公号:Rand_cs NES 使用的 CPU 为 6502,但与标准的 6502 有些许不同,最大的不同在于 NES 使用的芯片拥有一个 pAPU(pseudo-Audio Process ...
- C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行、建行轻应用)
C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行.建行轻应用), 从BASE64编码的公钥中提取16进制字符串公钥, 从BASE64编码的私钥中提取16进制字符串私钥, 锦州银行 ...
- Java实际工作里用到的几种加密方式
1.Base64加密 最简单的加密方式,甚至可以说不是加密,只是一种用64个字符表示任意二进制数据的方法.Base64编码原理是将输入字符串按字节切分,取得每个字节对应的二进制值(若不足8比特则高位补 ...
- SQLBI_精通DAX课程笔记_01_DAX介绍
一:函数式语言 DAX是一个函数式语言,应用于Analysis Services , PowerPivot , 和Power Bi . 二:共同与不同 2.1 共同点 DAX与PowerPivot ...
- HDOJ 6703 Array
HDOJ 6703 Array 题目 题目链接 array *Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- Linux 内核:设备树(3)把device_node转换成platfrom_device
Linux 内核:设备树(3)把device_node转换成platfrom_device 背景 在上一节中讲到设备树dtb文件中的各个节点转换成device_node的过程(<dtb转换成de ...
- qt中的 connect 函数
1.connect()函数实现的是信号与槽的关联. 注意:只有QO bject类及其派生的类才能使用信号和槽的机制 2.函数原型 static QMetaObject::Connection conn ...
- java --面试题大全
J2EE面试题 文档版本号:V2.0 2016年11月 目 录 1. Java基础部分 8 1.1. 一个".java"源文 ...
- ubuntu20 python3 安装 easysnmp
前言 最近在 ubuntu20 上通过 pip3 安装 easysnmp,安装失败,系统提示:net-snmp/net-snmp-config.h: No such file or directory ...