android
- 资源位置
- 快捷键AS
- 安卓写代码代码知识
- adb知识
- 版本问题
- 商汤
- 布局管理器
- 按钮
- Context(上下文)
- 大的组件,或者组件群使用<><>标签形式,小的组件使用<>形式
- android studio会自动执行class MainActivity,不需要实例化。
- 安卓四大组件
- camera
资源位置
主要资源都在app文档里面
app下manifests负责整体布局
{AndroidManifest.xml里面使用**@名字**进行引用修改布局}
java负责代码编写
res负责资源的存储
{
drawable整体画布
layout具体界面布局(内容)
mimap(存储各种质量的图片)
values(存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称)
{
在一个应用中有多个控件的多个属性一样时,如果我们每一个控件都写多行相同的代码,未免太过于麻烦,这个时候我们就可以使用style资源
style支持布局文件中的所有属性,且style只对控件进行定义
主题:theme
theme也使用style来进行定义,但是注意,theme只对Activity进行定义
}
}
module 的 build.gradle {
plugins 插件表示是一个可运行程序
android 各类版本内容,向下兼容
denpedencis 依赖包(本地依赖 库依赖 远程依赖 )
}
project的build.gradle{一个依赖闭包,一个插件闭包}
Hello word 在layout的code里面
快捷键AS
链接: link
安卓写代码代码知识
Log.e 错误信息
Log.w 警告信息
Log.d 调试信息
Log.i 重要信息
Log.v 琐碎信息
API查询地址:链接: link.
版本选择>=23,安卓9.0为28
adb知识
1.adb connect 192.168.31.246 局域网内连接电视
2.adb shell 打开电视的脚本
3.adb install -r 替换已存在的应用程序,也就是说强制安装
版本问题
tcl 使用Android 9.0版
商汤
序列licence.lic需要放置于C:\Users\kai16.wu\Desktop\SenseSDK\SenseAsteriaMTK_9652_v0.2.2_20210330\sample\AsteriaMTK\app\src\main\assets
布局管理器
xml布局文件
在layout中,将java逻辑和界面分割开来
在逻辑代码中Activity中使用setContentView(R.layout.XXX);将xml文件中的布局内容显示。(R代表res文件夹即resource)
按照字面意思理解即可:
FrameLayout 帧布局管理器(一帧一个控件)
LinearLayout 线性布局管理器
TableLayout 表格布局管理器
RelativeLayout 相对布局管理器
GridLayout 网格布局管理器(比较方便,基本上可以代替TableLayout)
从我的观察和思考来看,相对布局管理器用的比较多
RelativeLayout 相对布局管理器
以参考组件进行组件布局
RelativeLayout.LayoutParams提供的属性
相对布局属性详解
记住俩个关键字:margin(边缘) align(对齐)
LinearLayout 线性布局管理器
水平线性布局管理器
垂直线性布局管理器
帧布局管理器
布局管理器嵌套(多种布局管理器混合使用)
按钮
android:background="#0000",可以去掉按钮组件的背景,也就是背景颜色为透明,效果如下所示:
wrap_content的意思是组件尺寸大小刚好包含内容即可
Context(上下文)
上下文用this指针来代表,上下文中this的使用主要看this在上下文中指的是谁,可以是当前类,当前事件处理函数,也可以是主组件等,主要看需要哪个,有时候函数传入this,是因为需要与this指向的东西有联系。
大的组件,或者组件群使用<><>标签形式,小的组件使用<>形式
android studio会自动执行class MainActivity,不需要实例化。
安卓四大组件
活动(Activity)
活动四个状态
活动生命周期
方框中为可以回调的方法
创建Activity
使用activity向导创建activity可以一次配置完成,直接创捷activity会出现Java文件没有被配置的问题,以及没有对应的xml文件的问题。
启动和关闭activity
启动activity通过intent,在我看来将一个activity用intent对象进行存储,使用上级界面的按钮进行触发启动,也就是常见的界面切换。关闭回到上级界面则直接在当前界面使用组件监听调用finish()完成。
使用Bundle在Activity之间交换数据(上级页面向下级传输数据)
bundle相当于一个传输数据的媒介,上级界面通过Intent intent=newIntent(MainActivity.this,Address.class)将下级界面保存在intent,再痛过bundle.putXXX()将数据保存在bundle里面,然后下级界面通过intent.putExtras(bundle)将bundle存在当前界面的intent对象中。下级界面使用时候,先获取intent,再通过intent.getExtras()获取bundle,获取数据之后再进行后续在组件上显示,组件在下级界面activity对应的xml布局文件中。
调用另一个Activity并返回结果(下级页面向上级传输数据)
主要是使用startActivityForResult(intent,0x007)启动下级页面的Activity,使用setResult(0x007,intent)回传下级界面的intent,用intent和bundle俩个对象存储信息,传输信息,获取信息,最终完成相应功能。
Fragment的生命周期
多个activity重用Fragment或者一个activity布局多个Fragment,activity是整个界面,Fragment在activity里面
可以看到activity也就是大的界面没变,但是activity界面的一部分通过按钮变换,称为Fragment。
服务(Service)
定义
分类
作用
后台运行一些app
使用
生命周期
onCreate创建服务对象时运行
onStartCommand启动服务时候运行
Bound Service???
作用
用于和activity交换数据,调用方法,而不是activity作为一个触发器。
生命周期
步骤
IntentService
耗时任务,普通service会直接导致主线程阻塞,需新创建子线程运行耗时任务,但是intent Service不需要,并且可以自动开关子线程。换句话说,intentService自动创建,开关了子线程,更加方便。
内容(Content Provider)
作用
程序之间要使用数据,但是出于安全无法直接使用数据,content Provider可以实现不同程序间共享数据,同时保证被访问数据的安全。实际也就是个中间容器。
数据模型
每一行代表一条数据记录,每一列代表特定类型的数据
url
定位所有网上资源
uri
笼统定位资源,不局限于客户端和服务器
创建使用 Content Provider
提供广播接受器(Broadcast Receive)
链接: link
intent
基本上最多使用的是这三大组件来构建一个app,然后通过intent作为媒介在三者之间进行数据传输,完成功能。
显式intent
隐式intent
区别
intent过滤器
ShowActivity和MainActivity分别在manifests有一个过滤器配置文件
intent过滤器的作用就是符合的属性进行show
安卓程序调试
DDMS 现在使用Android Profiler代替DDMS
输出日志信息
编辑器调试
左侧橘色小灯泡
右侧红色叹号,小红条
断点调试,左侧点红,点击小虫子,之后和其他软件一样
实时计算变量的值:有个小计算机按钮,如下计算变量a+b的值
基于回调和基于事件监听
物理按钮
重写onKeydown方法
样式资源和主题资源
主题资源用来设置程序的最外框
样式资源用来设置程序的最外框内的组件
即便是打上一横杠类也是可以用的,只是有新的类可以替换该类
拍摄
存储
Shared Preferences
第一次登陆存储,第二次登陆读取
使用该存储实现自动登录功能
第一个参数是存储ShaedPreferences的文件名
第二个参数是指定本应用还是跨应用
存储时候put+数据类型的参数就是,第一个参数是key,第二个参数是值,存储在如下所示文件夹中
getStrng的第一个参数相当于键值key,根据该key值在shared_prefs找对应的string,如果没找到则使用第二个参数的值。
内部存储
保存
读取
外部存储
读取外部存储的权限要开
保存
读取
手机使用sqLite数据库
.tables查看所有已经创建的表
其他的和一般的数据库类似
使用代码操作数据库
数据库被保存在data/com.包名/databases/表名
使用final关键字的好处
Handler
进程:
线程:
线程又分为主线程和子线程,主线程可以分为多个子线程
new Thread(new Runnable(){})//创建新线程
thread.start();//开启线程
子线程不允许操作主线程中的组件
解决办法:
handler只是一个消息传递机制,不一定一定会伴随着线程出现,handler可以处理message
Massage
属性:
获取:
例如
msg.what=0x11;//0x十六进制
if(msg.what ==0x11){}
Looper
Handler 、Looper、MessageQueue
![请添加图片描述](https://img-blog.csdnimg.cn/954a5c04f7f8489abce6f6a46a8a3f4f.png?x-oss-
传感器
1.通过注册传感器监听器获取传感器
2.获取传感器的数据
3.取消注册监听器
camera
打开摄像头并预览
保存照片
1.创建文件夹
2.给图片设置名称
3.根据文件夹地址和文件名称创建文件对象
4.根据文件对象创建输出流对象
5.将缓冲区(bitmap)的数据写入输出流当中
释放摄像头
对于跑别人项目网络连接问题,一个是看android的sdk包版本有没有下载,一个是网络vpn,如果还不行就需要手动更新配置文件,或者点击更新配置文件的提示。本质上是网络的问题,要注意代理的配置。
gradle script是对安卓studio软件的配置,不是某一个app
打开的项目是一个project,project下面的自动生成app文件是一个modlue