
Kotlin第一行代码
第一行代码第三版学习
csdn_DaShuiNiu
爱学习的三好学生!
展开
-
声明以上第一行代码资料
第一行代码学习记录均为早期书籍刚出版时还没有电子版,本人一点点抄书码字,并且学习做记录的总结经验,现如今已经有了PDF版本的,可以直接网络搜索PDF版本的查看,并非看本人写的,毕竟早期的版本还是有很多刊误的,本人提交的刊误就有十多处,所以还是能看新的看新的...原创 2022-06-28 20:46:14 · 124 阅读 · 0 评论 -
14.5--深色主题
我们一直以来使用的操作系统都是以浅色主题为主的,这种主题模式在白天或者是光纤宠族的情况下使用起来没有任何问题,可是在夜晚灯光关闭的情况下使用就会显得非常刺眼。于是,许多应用程序为了能够让用户在光纤昏暗的情况下更加舒适地使用,会在应用内部提供一个一键切换夜间模式的按钮。当用户开启了夜间模式,就会将应用程序的整体颜色都调整成更加适合于夜间浏览的颜色。不过,这种应用程序自发实现夜间模式的方式很难做到全局统一,既有些应用可能支持夜间模式,有些应用却不支持。而且重复操作的问题也很让人头疼,比如说我在一个应用中原创 2020-07-24 15:00:59 · 474 阅读 · 0 评论 -
14.4--调试Android 程序
当开发过程中遇到一些奇怪的 bug,但又迟迟定位不出来原因是什么的时候,最好的解决办法就是调试了。调试允许我们逐行地执行代码,并可以实时观察内存中的数据,从而能够比较轻易地査出问题的原因。那么本节中我们就来学习一下使用 Android Studio 来调试 Android 程序的技巧。还记得在第 6章的最佳实践环节中编写的那个强制下线程序吗?就让我们通过这个例子来学习ー下 Android 程序的调试方法吧。这个程序中有一个登录功能,比如说现在登录出现了问题,我们就可以通过调试来定位问题的原因。不用.原创 2020-07-24 13:51:04 · 307 阅读 · 0 评论 -
14.3--定制自己的日志工具
早在1.4 节中我们就已经学过了 Android 日志工具的用法,并且日志工具也确实贯穿了我们整本书的学习。虽然 Android 中自带的日志工具功能非常强大,但也不能说是完全没有缺点,例如在打印日志的控制方面就做得不够好。打个比方,你正在编写ー个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志,在项目正式上线之后仍然会照常打印,这样不仅会降低程序的运行效率,还有可能将些机密性的数据泄露出去。那该怎么原创 2020-07-24 13:36:24 · 187 阅读 · 0 评论 -
14.2--使用Intent 传递对象
Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动、发送广播、启动服务等。在进行上述操作的时侯,我们还可以在 Intent 中添加一些附加数据,以达到传值的效果,比如在 FirstActivity 中添加如下代码。val intent = Intent(this,SecondActivity::class.java)intent.putExtra("string_data","hello")intent.putExtra("int_data",100)startActivity(原创 2020-07-24 03:00:16 · 336 阅读 · 0 评论 -
14.1--全局获取Context 的技巧
回想这么久以来我们所学的内容,你会发现有很多地方都需要用到 Context,弹出 toast 的时侯需要,启动活动的时侯需要,发送广播的时候需要,操作数据库的时侯需要,使用通知的时候需要……。或许目前你还没有为得不到 Context 而发愁过,因为我们很多的操作都是在活动中进行的,而活动本身就是一个 Context 对象。但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离 Activity 类,但此时你又恰恰需要使用 Context,也许这个时候你就会感到有些伤脑筋了。例如,在第1原创 2020-07-23 19:56:52 · 456 阅读 · 0 评论 -
13.7--Kotlin 课堂:使用DSL 构建专有的语法结构
DSL 的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离其原始语法结果的代码,从而构建出一种专有的语法结构。毫无疑问,Kotlin 也是支持DSL 的,并且在Kotlin 中实现DSL 的实现方式并不固定,比如我们之前在第9 章的Kotlin 课堂中使用 infix 函数构建出特有语法结构就属于DSL。不过本节课我们的主要学习目标是通过高阶函数的方式来实现DSL,这也是Kotlin 中实现DSL 最常见的方式原创 2020-07-12 04:19:37 · 367 阅读 · 0 评论 -
13.6--WorkManager
Android 的后台机制是一个很复杂的话题,连我自己也没能完全搞明白不同Android 系统版本之间后台的功能与API 又发生了哪些变化。在很早之前,Android 系统的后台功能是非常开放的,Service 的优先级也很高,仅次于Activity,那个时候可以在Service 中做很多事情。但由于后台功能太过于开放,每个应用都想无限地占用后台资源,导致手机的内存越来越紧张,耗电越来越快,也变得越来越卡。为了解决这些情况,基本上Android 系统每发布一个新版本,后台权限都会被进一步收紧。我印象中与原创 2020-07-12 02:25:09 · 343 阅读 · 0 评论 -
13.5--Room
在第7章的时候我们学习了SQLite 数据库的使用方法,不过当时仅仅是使用了一些原生的API来进行数据的增删改查操作。这些原生API虽然简单易用,但是如果放到大型项目当中的话,会非常容易让项目的代码变得混乱,除非你进行了很好的封装。为此失眠上出现了诸多专门为Android 数据库设计的ORM 框架。ORM (Object Relational Mapping)也叫对应关系映射。.简单来讲,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,将面向对象的语言和面向关系的数据库之间建立一种影射原创 2020-07-12 00:42:44 · 322 阅读 · 0 评论 -
13.4--LiveData
LiveData是Jetpack 提供的一种响应式编程组件,它可以包括任何类型的数据,并在数据发生变化的时候通知给观察者。LiveData 特别适合于ViewModel 结合在一起使用,虽然它也可以单独用在别的地方,但是绝大多数情况下,它是使用在ViewModel 当中的。13.4.1LiveData的基本用法之前我们编写的那个计数器虽然功能非常简单,但其实是存在问题的。目前的逻辑是,当每次点击”Plus One“ 按钮时,都会献给ViewModel 中的计数加1,然后立即获取最新的计数。这..原创 2020-07-11 02:16:09 · 588 阅读 · 0 评论 -
13.3--Lifecycles
在编写Android 应用程序的时候,可能经常会遇到需要感知Activity 生命周期的情况。比如说,某个界面中发起了一条网络请求,但是当请求得到响应的时候,界面或许已经关闭了,这个时候就不应该继续对响应的结果进行处理。因此,我们需要能够时刻感知到Activity 的生命周期,以便在适当的时候进行相应的逻辑控制。感知Activity 的生命周期并不复杂,早在第3章的时候我们就学习过Activity 完整的生命周期流程。但问题在于,在一个Activity 中去感知它的生命周期非常简单,而如果要在一个非Ac原创 2020-07-09 23:07:02 · 312 阅读 · 0 评论 -
13.2--ViewModel
ViewModel 应该算是Jetpack 中最重要的组件之一了。其实Android 平台上之所以会出现注入MVP、MVVM 之类的项目架构,就是因为在传统的开发模式下,Activity 的任务实在是太重了,既要负责逻辑处理,又要控制UI 提示,甚至还得处理网络回调,等等。在一个小项目中这样写或许没有什么问题,但是如果在大型项目中仍然使用这样写法的话,那么这个项目将会变得非常臃肿并且难以维护,因为没有任何架构上的划分。而ViewModel 的一个重要作用就是可以帮助Activity 分担一部分工作,它是原创 2020-07-09 00:21:03 · 586 阅读 · 0 评论 -
13.1--Jetpack 简介
Jetpack 是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码,并简化我们的开发过程。Jetpack 中的组件有一个特点,它们大部分不依赖于任何Android 系统版本,这意味着这些组件通常是定义在AndroidX ku 当中的,并且拥有非常好的向下兼容性。我们先来看一张Jetpack 目前的”全家福“,如图所示:可以看到,Jetpack 的家族还是非常庞大的,主要由基础、架构、行为、界面这4个本分组成。你会发现,里面有许多东西是我们已经学过的,像通知、权限、Fragment原创 2020-07-08 23:01:35 · 519 阅读 · 0 评论 -
12.9--Git 时间:版本控制工具的高级用法
现在你对于Git 应该完全不会感到陌生了吧?通过之前两次Git 时间的学习,你已经掌握了很多Git 中常用的命令,像提交代码这种简单的操作相信肯定是难不倒你的。打开终端界面,进入MaterialTest 这个项目的根目录,然后执行提交操作:git initgit add .git commit -m "Frist Commit"12.9.1 分支的用法分支是版本控制工具中比较高级且比较重要的一个概念,它主要的作用就是在现有代码的基础上开辟一个分叉口,使得代码可以在主干线和分支..原创 2020-07-08 03:29:43 · 270 阅读 · 0 评论 -
12.8--Kotlin 课堂:编写好用的工具方法
到目前为止,我们已经将Kotlin 大部分系统性的知识学习完了。掌握了如此多的Kotlin 特性,你知道该如何对它们进行灵活的运用吗?事实上,Kotlin 提供的丰富语法特性给我们提供了无限扩展的可能,各种复杂的的API 经过特殊的封装处理之后都能变得简单易用。比如我们之前在第7章体验过KTX 库(第七章Kotlin 课堂),就是Google 为了简化许多API 用法而专门设计的。不过KTX 库所能覆盖到的功能毕竟有限,因此最重要的还是我们要能养成对Kotlin 的各种特性进行灵活运用。那么在本节的Ko原创 2020-07-08 01:50:54 · 329 阅读 · 0 评论 -
12.7--可折叠标题栏
虽说我们现在的标题栏是使用 Toolbar 来编写的,不过它看上去和传统的 ActionBar 其实没什么两样,只不过可以响应 RecyclerView 的滚动事件来进行隐藏和显示。而 Material Design 中并没有限定标题栏必须是长这个样子的,事实上,我们可以根据自己的喜好随意定制标题栏的样式。那么本节中我们就来实现一个可折叠式标题栏的效果,需要借助 CollapsingToolbarLayout这个工具。12.7.1CollapsingToolbarLayout顾名思义,Colla..原创 2020-07-07 02:06:06 · 445 阅读 · 2 评论 -
12.6--下拉刷新
下拉刷新这种功能早就不是什么新鲜的东西了,几乎所有的应用里都会有这个功能。不过市面上现有的下拉刷新功能在风格上都各不相同,并且和 Material Design 还有些格格不人的感党。因此,Google为了让 Android 的下拉刷新风格能有一个统一的标准,于是在 Material Design 中制定了一个官方的设计规范。当然,我们并不需要去深入了解这个规范到底是什么样的,因为Google早就提供好了现成的控件,我们只需要在项目中直接使用就可以了。SwipeRefreshLayout 就是用于实现下原创 2020-07-06 22:01:17 · 407 阅读 · 0 评论 -
12.5--卡片式布局
虽然现在 MaterialTest中已经应用了非常多的 Material Design效果,不过你会发现,界面上最主要的一块区域还处于空白状态。这块区域通常都是用来放置应用的主体内容的,我准备使用些精美的水果图片来填充这部分区域。那么为了要让水果图片也能 Material 化,本节中我们将会学习如何实现卡片式布局的效果。卡片式布局也是 MaterialDesign 中提出的一个新的概念,它可以让页面中的元素看起来就像在卡片中一样,并且还能拥有圆角和投影,下面我们就开始具体学习ー下。12....原创 2020-07-06 00:44:01 · 1355 阅读 · 0 评论 -
12.4--悬浮按钮和可交互提示
立面设计是 Material Design 中一条非常重要的设计思想,也就是说,按照 Material Design 的理念,应用程序的界面不仅仅只是一个平面,而应该是有立体效果的。在官方给出的示例中,最简单且最具代表性的立面设计就是悬浮按钮了,这种按钮不属于主界面平面的一部分,而是位于另外一个维度的,因此就会给人一种悬浮的感觉。本节中我们会对这个悬浮按钮的效果进行学习,另外还会学习一种可交互式的提示工具。关于提示工具,我们之前一直都是使用的 Toast,但是 Toast 只能用于告知用户某某事情已经发原创 2020-07-05 23:00:12 · 594 阅读 · 1 评论 -
12.3--滑动菜单
滑动菜单可以说是 Material Design 中最常见的效果之一了,在许多著名的应用(如 Gmail、Google Photo等)中,都有滑动菜单的功能。虽说这个功能看上去好像挺复杂的,不过借助Google提供的各种工具,我们可以很轻松地实现非常炫醋的滑动菜单效果,那么我们马上开始吧。12.3.1 DrawerLayout所谓的滑动菜单就是将一些萊单选项隐藏起来,而不是放置在主屏幕上,然后可以通过滑动的方式将菜单显示出来。这种方式既节省了屏幕空间,又实现了非常好的动画效果,是 Mater..原创 2020-07-05 18:26:43 · 813 阅读 · 0 评论 -
12.2--Toolbar
Toolbar 将会是我们本章接触的第一个控件,是由AndroidX 库提供的。虽说对于 Toolbar 你暂时应该还是比较陌生的,但是对于它的另一个相关控件 ActionBar ,你就应该有点熟悉了。回忆一下,我们曾经在 4.4.1 小节为了使用一个自定义的标题栏,而隐藏了系统原生的 ActionBar。没错,每个Activity 最顶部的那个标题栏其实就是 ActionBar,之前我们编写的所有程序里直都有它的身影。不过ActionBar 由于其设计的原因,被限定只能位于 Activity 的顶原创 2020-07-05 16:00:52 · 283 阅读 · 0 评论 -
12.1--什么是Material Design
Material Design 是由谷歌的设计工程师们基于传统优秀的设计原则,结合丰富的创意和科学技术所发明的一套全新的界面设计语言,包含了视觉、运动、互动效果等特性。那么谷歌凭什么认为 Material Design 就能解决 Android 平台界面风格不统一的问题呢?一言以蔽之好看。为了做出表率,谷歌从 Android5.0 系统开始,就将所有内置的应用都使用 Material Design 风格来进行设计。这里我随便截了两张图,你可以先欣赏一下,如图所示。其中,左边的应用是 Play S原创 2020-07-04 21:05:52 · 861 阅读 · 0 评论 -
11.7--Kotlin 课堂:使用协程编写高效的并发程序
协程属于Kotlin 中非常有特色的一项技术,因为大部分编程语言中是没有协程这个概念的。那么什么是协程呢?它其实和线程是有点类似的,可以简单地将它理解成一种轻量级的线程。要知道,我们之前所学习的线程是非常重量级的,它需要依靠操作系统的调度才能实现不同线程之间的切换。而使用携程切可以仅在编程语言的层面就能实现不同协程之间的切换,从而大大提升了并发编程的运行效率。举一个具体点的例子,比如我们有如下foo() 和bar() 两个方法:fun foo(){ println(1) pri原创 2020-07-03 04:03:31 · 654 阅读 · 0 评论 -
11.6--最好的网络库:Retrofit
既然我们这一章讲解Android 网络技术,那么就不得不提到Retrofit ,因为它实在是太好用了。Retrofit,同样是一款由Square 公司开发的网络库,但是它和OkHttp 的定位完全不同。OkHttp 侧重的是底层通信的实现,而Retrofit 侧重的是上层接口的封装。事实上,Retrofit 就是Square 公司在OkHttp 的基础上进一步开发出来的应用层网络通信库,是的我们可以用更加面向对象的思维进行网络操作。Retrofit 的项目主页地址是:https://github.com/s原创 2020-06-29 01:29:50 · 327 阅读 · 0 评论 -
11.5--网络请求回调的实现方式
目前你已经掌握了 HttpURLConnection 和 OkHttp的用法,知道了如何发起 HTTP 请求,以及解析服务器返回的数据,但也许你还没有发现,之前我们的写法其实是很有问题的。因为ー个应用程序很可能会在许多地方都使用到网络功能,而发送 HTTP 请求的代码基本都是相同的,如果我们每次都去编写一遍发送 HTTP 请求的代码,这显然是非常差劲的做法。没错,通常情况下我们都应该将这些通用的网络操作提取到一个公共的类里,并提供一个静方法,当想要发起网络请求的时候,只需简单地调用一下这个方法即可。比.原创 2020-06-24 19:55:02 · 1131 阅读 · 0 评论 -
11.4--解析 JSON 格式数据
现在你已经掌握了 XML 格式数据的解析方式,那么接下来我们要去学习一下如何解析 JSON 格式的数据了。比起 XML, JSON 的主要优势在于它的体积更小,在网络上传输的时侯可以更省流量。但缺点在于,它的语义性较差,看起来不如 XML 直观。在开始之前,我们还需要在 C: \Apache\htdocs 目录中新建一个 get_data.json 的文件,然后编辑这个文件,并加入如下 JSON 格式的内容:[ { "id": "5", "version": "5.5",原创 2020-06-22 22:12:23 · 452 阅读 · 0 评论 -
11.2--使用HTTP 访问网络
如果说真的要去深入分析 HTTP 协议,可能需要花费整整一本书的篇幅。这里我当然不会这干,因为毕竟你是跟着我学习 Android 开发的,而不是网站开发。对于 HTTP 协议,你只需要稍微了解一些就足够了,它的工作原理特别简单,就是客户端向服务器发出一条 HTTP 请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。是不是非常简单?一个浏览器的基本工作原理也就是如此了。比如说上一节中使用到的 WebView 控件,其实也就是我们向百度的服务器发起了一条 HTTP 请原创 2020-06-22 15:59:53 · 549 阅读 · 0 评论 -
11.1--WebView 的用法
有时候我们可能会碰到一些比较特殊的需求,比如说要求在应用程序里展示一些网页。相信每个人都知道,加载和显示网页通常都是浏览器的任务,但是需求里又明确指出,不允许打开系统浏览器,而我们当然也不可能自己去编写一个浏览器出来,这时应该怎么办呢?不用担心,Android 早就已经考虑到了这种需求,并提供了一个 WebView 控件,借助它我们就可以在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页Webview 的用法也是相当简单,下面我们就通过一个例子来学习ー下吧。新建一个 WebviewT原创 2020-06-22 11:52:56 · 665 阅读 · 0 评论 -
10.6--Kotlin 课堂:泛型的高级特性
还记得在第8章的Kotlin 课堂里我们学习的Kotlin 泛型的基本用法吗?这些基本用法其实和Java 中泛型的用法是大致相同的,因此也相对比较好理解。然而实际上,Kotlin 在泛型方面还提供了不少特有的功能,掌握了这些功能,你将可以更好玩转Kotlin,同时还能实现一些不可思议的语法特性,那么我们自然不能错过这部分内容了。10.6.1 对泛型进行实化泛型实化这个功能对于绝大多数Java 程序员来将是非常陌生的,因为Java 中完全没有这个概念。而如果我们想要深刻地理解泛型实化,就要先解释.原创 2020-06-20 22:05:09 · 294 阅读 · 0 评论 -
10.5--Service 的更多技巧
以上所学的都是关于服务最基本的一些用法和概念,当然也是最常用的。不过,仅仅满足于此显然是不够的,关于的更多高级使用技巧还在等着我们呢,下面就赶快去看一看吧。10.5.1 使用前台Service前面已经说过,从Android 8.0 系统开始,只有当应用保持在前台可见状态的情况下,Service 才能保证稳定运行,一旦应用进入后台之后,Service 随时都有可能被系统回收。而如果你希望Service 能够一直保持运行状态,就可以考虑使用前台Service。前台Service 和普通Servic.原创 2020-06-19 00:36:55 · 250 阅读 · 0 评论 -
10.4--Service 的生命周期
之前我们学习过了Activity 以及Fragment 的生命周期。类似地,Service 也有自己的生命周期。前面我们使用到的onCreate()、onStartCommand()、onBind()和onDestroy() 方法都是在Service 生命周期内可能回调的方法。一旦在项目的任何位置调用了Context的startService() 方法,相应的Service 就会启动,并回调onStartCommand() 方法。如果这个Service 服务之前还没有创建过,onCreate() 方法会原创 2020-06-17 22:50:43 · 245 阅读 · 0 评论 -
10.3--Service 的基本用法
了解了Android多线程编程的技术之后,下面就让我们进入到本章的正题,开始对Service的相关内容进行学习。作为Android四大组件之一,Service也少不了有很多非常重要的知识点,那我们自然要从最基本的用法开始学习了。10.3.1 定义一个服务首先看一下如何在项目中定义一个服务。新建一个ServiceTest项目,然后右击com.example.servicetest→ New→ Service→ Service,会弹出如图所示的窗口:可以看到,这里我们将类名定义成...原创 2020-06-17 18:51:09 · 505 阅读 · 0 评论 -
10.2--Android 多线程编程
熟悉Java的你,对多线程编程一定不会陌生吧。当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如果不将这类操作放在子线程里去运行,就会导致主线程被阻塞住,从而影响用户对软件的正常使用。那么就让我们从线程的基本用法开始学习吧。10.2.1 线程的基本用法Android多线程编程其实并不比Java多线程编程特珠,基本都是使用相同的语法。比如说,定义一个线程只需要新建一个类继承自Thread,然后重写父类的run()方法,并在里面编写耗时逻.原创 2020-06-16 09:23:08 · 258 阅读 · 0 评论 -
10.1--Service 是什么
Service是Android中实现程序后台运行的解决方案,它非常适合执行那些不需要和用户交互而且还要求长期运行的任务。Service的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,Service仍然能够保持正常运行。不过需要注意的是,Service并不是运行在一个独立的进程当中的,而是依赖于创建Service时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会停止运行。另外,不要被Service的后台概念所迷惑,实际上Servic原创 2020-06-15 21:41:39 · 228 阅读 · 0 评论 -
9.6--Git时间:版本控制工具进阶
在上一次的Git时间里,我们学习了关于Git最基本的用法,包括安装,创建代码仓库,以及提交本地代码。本届中我们将要学习更多的使用技巧,不过在开始之前要先把准备工作做好。所谓的准备工作就是要给一个项目创建代码仓库。这里就选择在PlayVideoTest 项目中创建吧。打开终端界面,进入这个项目的根目录下面,然后执行git init 命令。9.6.1 忽略文件代码仓库现在已经创建好了,接下来我们应该去提交PlayVideoTest 项目中的代码。不过在提交之前,你也许应该考虑一下,是不是所有的文件都原创 2020-06-14 06:08:10 · 305 阅读 · 0 评论 -
9.5--Kotlin课堂:使用 infix 函数构建更可读的语法
在前面的章节中,我们已经多次使用过A to B 这样的语法结构构建键值对,包括Kotlin 自带的mapOf() 函数,以及我们在第7章中自己创建的cvOf() 函数。这种语法结构的优点是可读性高,相比于调用一个函数,它更接近于使用英语的语法来编写程序。可能你会好奇,这种功能是怎么实现的呢? to 是不是Kotlin 语言中的一个关键字?本节的Kotlin 课堂中,我们就对这个功能进行深度解密。首先,to 并不是 Kotlin 语言中的一个关键字,之所以我们能够使用 A to B 这样的语法结构,是原创 2020-06-14 04:03:26 · 459 阅读 · 0 评论 -
9.4--播放多媒体文件
手机上最常见的休闲方式毫无疑问就是听音乐和看电影了,随着移动设备的普及,越来越多的人都可以随时享受优美的音乐,以及观看精彩的电影。而Android在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器,下面我们就来具体地学习一下。9.4.1 播放音频在Android中播放音频文件一般都是使用MediaPlayer类来实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单。下表列出了Me.原创 2020-06-14 01:48:52 · 599 阅读 · 0 评论 -
9.3--调用摄像头和相册
我们平时在使用QQ或微信的时候经常要和别人分享图片,这些图片可以是用手机摄像头拍的,也可以是从相册中选取的。类似这样的功能实在是太常见了,几乎在每一个应用程序中都会有,那么本节我们就学习一下调用摄像头和相册方面的知识。9.3.1 调用摄像头拍照先来看看摄像头方面的知识,现在很多的应用都会要求用户上传一张图片来作为头像,这时打开摄像头拍张照是最简单快捷的。下面就让我们通过一个例子来学习一下,如何才能在应用程序里调用手机的摄像头进行拍照。新建一个CameraAlbumTest项目,然后修改ac.原创 2020-06-13 08:08:19 · 614 阅读 · 0 评论 -
9.2--使用通知
通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户pm发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。Android的通知功能获得了大量用户的认可和喜爱,就连iOS系统也在5.0版本之后加入了类似的功能。9.2.1 创建通知渠道然而, 通知这个功的设计初衷是好的,后来却被开发者给玩坏了。每发出一条通知,都可能意味着自己的应用程序会拥原创 2020-06-12 01:28:27 · 467 阅读 · 0 评论 -
9.1--将程序运行到手机上
不必我多说,首先你需要拥有一部Android手机。现在Android手机早就不是什么稀罕物,几乎已经是人手一部了,如果你还没有的话,赶紧去购买吧。想要将程序运行到手机上,我们需要先通过数据线把手机连接到电脑上。然后进入到设置→开发者选项界面,并在这个界面中勾选中USB调试选项。注意从Android 4.2系统开始,开发者选项默认是隐藏的,你需要先进入到“关于手机”界面,然后对着最下面的版本号那一栏连续点击,就会让开发者选项显示出来。然后如果你使用的是Windows操作系统,还需要在电脑上安装手机的驱原创 2020-06-09 10:36:18 · 841 阅读 · 0 评论