【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之间 ...
随机推荐
- redhat8 添加scsi类型的硬盘后开机重配虚拟机 且黑屏
原因:因为vmware磁盘优先级里nvme类型的磁盘比scsi类型的磁盘优先级高,所以开机先启动scsi类型的磁盘 又因为scsi并不是系统盘所以不能够实现开机 解决方法: 改变vmware的磁盘优先 ...
- Vue 3 Teleport:掌控渲染的艺术
title: Vue 3 Teleport:掌控渲染的艺术 date: 2024/6/5 updated: 2024/6/5 description: 这篇文章介绍了Vue3框架中的一个创新特性--T ...
- css做多列瀑布流
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 小程序的文件结构及配置 小程序配置 app.json
程序包含一个描述整体程序的 app 和多个描述各自页面的 page. 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 文件 必填 作用 app.js 是 小程序逻辑-小程序入口文件 a ...
- golang sync.Map 与使用普通的 map 的区别
使用sync.Map与普通的Go map主要有以下几点区别: 1. 并发安全性 普通map: 在没有外部同步的情况下,不是并发安全的.在多goroutine访问时,如果没有适当的锁或其他同步机制保护, ...
- js中字符串的方法,17种方法
字符串的17种方法...... 1.length:返回字符串的长度. const str = "Hello, World!"; console.log(str.length); / ...
- 函数式表达式基本类型及固定类型 demo
1.常见类型及使用 import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.ut ...
- __int1024!
使用说明: 数据范围约为\(-2^{1024}\le N \le2^{1024}\),反映到十进制约为\(-10^{309}\le N \le10^{309}\),但不保证完全如此. 输入输出使用自带 ...
- ubuntu20 python2 通过安装包安装mysql-python
前言 众里寻他千百度,蓦然回首,那人却在灯火阑珊处. 最近要测试一个python2环境的代码,其中用到了MySQLdb, 查询网络,发现要安装mysql-python,于是就进行了一番艰难的探索,现在 ...
- Math.random()方法的使用及公式
条件1:取n-m范围的随机数(不包含m) 公式1:(int)(Math.random() * (m - n) + n); 条件2:取n-m范围的随机数(包含m) 公式2:(int)(Math.rand ...