android教程,android菜鸟教程

http://www.itjxue.com  2023-01-08 20:16  来源:未知  点击次数: 

Android Camera2 教程 · 第一章 · 概览

从 Android 5.0 开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2)并且废弃了旧的相机框架 Camera1(android.hardware.Camera)。作为一个专门从事相机应用开发的开发者来说,这一刻我等了太久了,Camera1 那寥寥无几的 API 和极差的灵活性早已不能满足日益复杂的相机功能开发。Camera2 的出现给相机应用程序带来了巨大的变革,因为它的目的是为了给应用层提供更多的相机控制权限,从而构建出更高质量的相机应用程序。本文是 Camera2 教程的开篇作,本章将介绍以下几个内容:

Camera2 的 API 模型被设计成一个 Pipeline(管道),它按顺序处理每一帧的请求并返回请求结果给客户端。下面这张来自官方的图展示了 Pipeline 的工作流程,我们会通过一个简单的例子详细解释这张图。

为了解释上面的示意图,假设我们想要同时拍摄两张不同尺寸的图片,并且在拍摄的过程中闪光灯必须亮起来。整个拍摄流程如下:

一个新的 CaptureRequest 会被放入一个被称作 Pending Request Queue 的队列中等待被执行,当 In-Flight Capture Queue 队列空闲的时候就会从 Pending Request Queue 获取若干个待处理的 CaptureRequest,并且根据每一个 CaptureRequest 的配置进行 Capture 操作。最后我们从不同尺寸的 Surface 中获取图片数据并且还会得到一个包含了很多与本次拍照相关的信息的 CaptureResult,流程结束。

相机功能的强大与否和硬件息息相关,不同厂商对 Camera2 的支持程度也不同,所以 Camera2 定义了一个叫做 Supported Hardware Level 的重要概念,其作用是将不同设备上的 Camera2 根据功能的支持情况划分成多个不同级别以便开发者能够大概了解当前设备上 Camera2 的支持情况。截止到 Android P 为止,从低到高一共有 LEGACY、LIMITED、FULL 和 LEVEL_3 四个级别:

相机的所有操作和参数配置最终都是服务于图像捕获,例如对焦是为了让某一个区域的图像更加清晰,调节曝光补偿是为了调节图像的亮度。因此,在 Camera2 里面所有的相机操作和参数配置都被抽象成 Capture(捕获),所以不要简单的把 Capture 直接理解成是拍照,因为 Capture 操作可能仅仅是为了让预览画面更清晰而进行对焦而已。如果你熟悉 Camera1,那你可能会问 setFlashMode() 在哪? setFocusMode() 在哪? takePicture() 在哪?告诉你,它们都是通过 Capture 来实现的。

Capture 从执行方式上又被细分为【单次模式】、【多次模式】和【重复模式】三种,我们来一一解释下:

CameraManager 是一个负责查询和建立相机连接的系统服务,它的功能不多,这里列出几个 CameraManager 的关键功能:

CameraCharacteristics 是一个只读的相机信息提供者,其内部携带大量的相机信息,包括代表相机朝向的 LENS_FACING ;判断闪光灯是否可用的 FLASH_INFO_AVAILABLE ;获取所有可用 AE 模式的 CONTROL_AE_AVAILABLE_MODES 等等。如果你对 Camera1 比较熟悉,那么 CameraCharacteristics 有点像 Camera1 的 Camera.CameraInfo 或者 Camera.Parameters 。

CameraDevice 代表当前连接的相机设备,它的职责有以下四个:

熟悉 Camera1 的人可能会说 CameraDevice 就是 Camera1 的 Camera 类,实则不是,Camera 类几乎负责了所有相机的操作,而 CameraDevice 的功能则十分的单一,就是只负责建立相机连接的事务,而更加细化的相机操作则交给了稍后会介绍的 CameraCaptureSession。

Surface 是一块用于填充图像数据的内存空间,例如你可以使用 SurfaceView 的 Surface 接收每一帧预览数据用于显示预览画面,也可以使用 ImageReader 的 Surface 接收 JPEG 或 YUV 数据。每一个 Surface 都可以有自己的尺寸和数据格式,你可以从 CameraCharacteristics 获取某一个数据格式支持的尺寸列表。

CameraCaptureSession 实际上就是配置了目标 Surface 的 Pipeline 实例,我们在使用相机功能之前必须先创建 CameraCaptureSession 实例。一个 CameraDevice 一次只能开启一个 CameraCaptureSession,绝大部分的相机操作都是通过向 CameraCaptureSession 提交一个 Capture 请求实现的,例如拍照、连拍、设置闪光灯模式、触摸对焦、显示预览画面等等。

CaptureRequest 是向 CameraCaptureSession 提交 Capture 请求时的信息载体,其内部包括了本次 Capture 的参数配置和接收图像数据的 Surface。CaptureRequest 可以配置的信息非常多,包括图像格式、图像分辨率、传感器控制、闪光灯控制、3A 控制等等,可以说绝大部分的相机参数都是通过 CaptureRequest 配置的。值得注意的是每一个 CaptureRequest 表示一帧画面的操作,这意味着你可以精确控制每一帧的 Capture 操作。

CaptureResult 是每一次 Capture 操作的结果,里面包括了很多状态信息,包括闪光灯状态、对焦状态、时间戳等等。例如你可以在拍照完成的时候,通过 CaptureResult 获取本次拍照时的对焦状态和时间戳。需要注意的是,CaptureResult 并不包含任何图像数据,前面我们在介绍 Surface 的时候说了,图像数据都是从 Surface 获取的。

如果要我给出强有力的理由解释为什么要使用 Camera2,那么通过 Camera2 提供的高级特性可以构建出更加高质量的相机应用程序应该是最佳理由了。

如果你熟悉 Camera1,并且打算从 Camera1 迁移到 Camera2 的话,希望以下几个建议可以对你起到帮助:

本章到此结束,主要是介绍了 Camera2 的一些基础概念,让大家能够基本了解 Camera2 的工作流程和基础概念,并且知道使用 Camera2 能够做些什么。如果你对 Camera2 还是感到很陌生,不要紧,后续的教程会带领大家逐步深入了解 Camera2。

Kotlin for Android使用教程(一)

本文主要讲解如何在Android中使用kotlin语言,如果想了解更多关于kotlin的知识, 请查阅官方中文文档

1. var a = 5 or val a: Int = 5

2. val TAG = "com.myapplication.example"

override fun onCreate(savedInstanceState: Bundle?) {}

view instanceof Button to view is Button

class MainActivity : AppCompatActivity(){}

xxx.println("---size:"+list.size());

print("---size: ${list.size},first: ${list[0]}")

1.if(a = 3 a= b){...}

1.if(a in 3..b){...}

1.在 project - build.gradle 添加

classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.1.0"

2.在 app-build.gradle 添加

apply plugin: 'kotlin-android-extensions'

compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.0"

首先是非空判断

这是普通的if else判断

现在采用全新而炫酷的表达方式:when

Android Studio教程:启动时不自动打开项目

每次打开Android Studio默认会自动打开一个project,下面介绍Android Studio启动时不自动打开项目的设置方法。

Android Studio

1.双击桌面Android Studio图标,打开Android Studio

2.主界面中,选择单击菜单栏 File 即文件 选项;

3.弹出File 菜单列表,单击 Settings 即设置 选项。

4.弹出对话窗口选择 Appearance Behavior 选项。

5.Appearance Behavior展开后选择System Settings选项。

6.取消勾选Reopen last project on startup选项,OK。

7.以上就是Android Studio启动时不自动打开项目的设置方法。

Android 新手教程:如何备份联系人

若是vivo手机,可以参考以下方法备份联系人:

1、将联系人备份到云服务

进入手机云服务--联系人--立即同步/备份,即可备份手机中的联系人。

2、将联系人导出至手机存储空间

Funtouch OS 3.0及以上系统:进入设置--(系统应用设置)--联系人--导入/导出联系人--导出至存储设备--选择联系人,即可导出联系人。

Funtouch OS 3.0以下系统:进入“联系人”软件--左菜单键--导入/导出--导出至存储设备--选择联系人,即可导出联系人。

安卓系统Android如何升级

 大家知道安卓系统Android如何升级呢?安卓系统Android升级教程是怎样的呢?下面一起来看看!

 注意:Android 2.3.4只支持从Android 2.3.3升级,如果你的系统是Android 2.3.1的话,你必须要先升级到Android 2.3.3才可以再升级为2.3.4。

另外,这个升级是增量升级,并不会删除你原先系统中的数据,所以你可以放心升级。

   升级方法:

第一步:先下载Android 2.3.4的升级数据包,可以到以下地址下载:Android 2.3.4升级数据包(Google官网);

第二步:将下载的数据文件放入到你的.内部存储空间的根目录下(不是SD卡);

第三步:重新启动你的系统,在重启后需要连续按下Volume Up(音量增大)和 Power(电源)按键的方法来进入到Bootloader;

第四步:使用Volume(音量)按键来选中“recovery”,再按下Power(电源)按键进行确认;

第五步:当你在屏幕上看到三角形以后,你需要按下Power(电源)按键然后再按下Volume Up(音量增大)按键,这个时候你就能够看到一个选项列表了,选择第一步中下载文件进行更新即可。

升级过程需要持续数分钟,请保持电力的充足。

(责任编辑:IT教学网)

更多

推荐Discuz!建站文章