首页
学习
活动
专区
工具
TVP
发布

老欧说安卓

专栏成员
251
文章
427937
阅读量
77
订阅数
《Android App开发进阶与项目实战》资源下载和内容勘误
下面是《Android App开发进阶与项目实战》一书用到的工具和代码资源: 1、本书使用的Android Studio版本为4.2,最新的安装包可前往Android官网页面下载。 2、本书提供所有示例源码的demo工程下载,源码(适配Android4.4到Android11)的下载方式见该书前言末尾的二维码,获取ppt课件同样扫描前言末尾的二维码。最新的源码也可访问我的github获取,github地址是https://github.com/aqi00/advanceapp,服务端的github地址是https://github.com/aqi00/net_server。
aqi00
2022-12-13
3540
Android开发笔记(一百八十九)利用LAME录制MP3音频
Android常用的录音工具有两种,分别是MediaRecorder和AudioRecord,前者用于录制普通音频,后者用于录制原始音频。然而无论是普通音频的amr和aac格式,还是原始音频的pcm格式,都不能在电脑上直接播放,也不能在苹果手机上播放,因为它们属于安卓手机的定制格式,并非通用的音频格式。若想让录音文件放之四海而皆能播放,就得事先将其转为通用的MP3格式,虽然Android官方的开发包不支持MP3转换,不过借助第三方的LAME库,能够将原始音频转存为MP3文件。 LAME是一个高质量的MP3编码器,它采用C/C++代码开发,需要通过JNI技术引入到App工程。LAME源码的下载页面为https://lame.sourceforge.io/download.php,笔者找到的最新版本是3.100,先解压下载完成的源码包,再按照下列步骤依次调整源码细节: 1、把源码包里面的libmp3lame目录整个复制到App模块的jni目录下; 2、把include目录下的lame.h头文件复制到jni\libmp3lame目录下; 3、打开jni\libmp3lame下面的set_get.h,把这行代码
aqi00
2022-11-16
1.5K0
Android8.0、9.0、10.0、11.0的新特性兼容适配代码修改
《Android Studio开发实战 从零基础到App上线(第2版)》在书后面的附录中给出了Android8和Android9的主要特性说明,附录表格如下图所示:
aqi00
2022-03-09
1K0
Android开发笔记(一百七十二)第二代翻页视图ViewPager2
正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager。与ViewPager相比,ViewPager2支持更丰富的界面特效,包括但不限于下列几点: 1、不但支持水平方向翻页,还支持垂直方向翻页; 2、支持RecyclerView.Adapter,允许调用适配器对象的notifyItem***方法,从而动态刷新某项视图; 3、除了当前页,也支持展示左右两页的部分区域; 4、支持在翻页过程中展示自定义的切换动画; 虽然ViewPager2增加了这么棒的功能,但它用起来非常简单,掌握下面几个方法就够了: setAdapter:设置二代翻页视图的页面适配器。 setOrientation:设置二代翻页视图的翻页方向。其中ViewPager2.ORIENTATION_HORIZONTAL表示水平方向,ViewPager2.ORIENTATION_VERTICAL表示垂直方向。 setPageTransformer:设置二代翻页视图的页面转换器,以便展示切换动画。 接下来利用循环适配器搭配二代翻页视图,演示看看ViewPager2的界面效果。注意RecyclerView与ViewPager2拥有各自的AndroidX库,故需修改模块的build.gradle,在dependencies节点内部补充以下两行依赖配置:
aqi00
2020-06-24
2.2K0
《Android Studio开发实战 从零基础到App上线(第2版)》常见问题解答
问题:第17页“1.5.2 安装SVN工具”这节里面提到的SVN仓库地址要填什么? 回答:SVN仓库地址指的是SVN服务器地址,如果你们单位有专人负责svn代码管理,可向他(svn管理员)咨询这个svn地址。如果你的代码只在自己电脑运行,不需要提交给服务器备份,那么建议略过svn这部分。
aqi00
2019-03-04
9540
Kotlin入门(20)几种常见的对话框
手机上的App极大地方便了人们的生活,很多业务只需用户拇指一点即可轻松办理,然而这也带来了一定的风险,因为有时候用户并非真的想这么做,只是不小心点了一下而已,如果App不做任何提示的话,继续吭哧吭哧兀自办完业务,比如转错钱了、误删资料了,往往令用户追悔莫及。所以对于部分关键业务,App为了避免用户的误操作,很有必要弹出消息对话框,提醒用户是否真的要进行此项操作。这个提醒对话框便是App开发常见的AlertDialog,说起这个AlertDialog,安卓开发者都有所耳闻,该对话框不外乎消息标题、消息内容、确定按钮、取消按钮这四个要素,使用Java编码显示提醒对话框,基本跟下面的示例代码大同小异:
aqi00
2019-01-18
2.7K0
Kotlin入门(21)活动页面的跳转处理
Activity的活动页面跳转是App最常用的功能之一,在前几章的demo源码中便多次见到了,常常是点击界面上的某个按钮,然后跳转到与之对应的下一个页面。对于App开发者来说,该功能的实现非常普通,使用Java编码不过以下两行代码而已:
aqi00
2019-01-18
1.7K0
Kotlin入门(16)容器的遍历方式
Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等等。不过Kotlin作为一门全新的语言,肯定还是要有自己的容器类,不然哪天Java跟Kotlin划清界限,那麻烦就大了。与Java类似,Kotlin也拥有三类基本的容器,分别是集合Set、队列List、映射Map,然后每类容器又分作只读与可变两种类型,这是为了判断该容器能否进行增删改等变更操作。Kotlin对修改操作很慎重,比如变量用val前缀表示不可修改,用var前缀表示允许修改;类默认是不允许继承的,只有添加open前缀才允许该类被继承;至于容器默认为只读容器,如果需要进行修改则需加上Mutable形成新的容器,比如MutableSet表示可变集合,MutableList表示可变队列,MutableMap表示可变映射。 既然Set/List/Map都属于容器,那么必定拥有相同的基本容器方法,具体说明如下: isEmpty : 判断该容器是否为空。 isNotEmpty : 判断该容器是否非空。 clear : 清空该容器。 contains : 判断该容器是否包含指定元素。 iterator : 获取该容器的迭代器。 count : 获取该容器包含的元素个数,也可通过size属性获得元素数量。 初始化赋值 : Kotlin允许在声明容器变量之时进行初始赋值,这点很方便比Java先进,当然不同容器的初始化方法有所区别,具体的对应关系见下表: 只读集合Set    setOf 可变集合    mutableSetOf 只读队列List    listOf 可变队列MutableList    mutableListOf 只读映射Map    mapOf 可变映射MutableMap    mutableMapOf 以上是Kotlin容器的基本方法,更具体的增删改查等用法则有所不同,下面分别介绍这三类六种容器的详细用法。
aqi00
2019-01-18
2.3K0
Android开发笔记(八十二)SDK版本兼容
Android控件很多属性都有默认值,比如文字默认黑色、编辑框默认透明背景等等,但因为android是开源的,各厂商都会自行修修补补,所以很多时候默认值并不靠谱。举例如下: 1、在某些低版本的Android上,如不指定文字颜色textColor,则默认的文字颜色是白色; 2、编辑框有的默认透明背景加一根底线,有的默认白色圆角背景; 3、主题Theme.Holo默认是浅灰背景,但有的品牌手机上改成了深灰背景; 4、调用View的getDrawingCache方法对指定控件截图,默认背景是黑色,而不是我们在UI上看到的透明背景,是不是很惊讶?所以截图前要先设置好背景色。 所以,为了让app在不同设备上都是一样的显示风格,就得自己设置期望的各种属性值,另外也尽量不用系统自带的主题,如有可能自定义主题风格,这样即使设备厂商修改了默认属性值,app也仍然保持统一的风格。
aqi00
2019-01-18
1K0
Android开发笔记(六十九)JNI实战
NDK全称为Native Development Kit,意即原生的开发工具,NDK允许开发者在APP中通过C/C++代码执行部分程序。它是Android提供的方便开发者通过JNI接口进行Java与C/C++交叉编译的工具集。 NDK的用于概括来说主要分为以下几种情况(以下三点摘自百度百科):  1. 代码的保护,由于apk的Java层代码很容易被反编译,而C/C++库反编译难度较大; 2. 在NDK中调用第三方C/C++库,因为很多的开源库都是用C/C++代码编写的,例如:OpenGL,FFmpeg等; 3. 便于移植,用C/C++写的库可以很方便在其它的嵌入式平台上再次使用。
aqi00
2019-01-18
9180
Android开发笔记(二十六)Java的容器类
集合中的元素是没有顺序的,而且不可以重复。这意味着,集合只能遍历而无法通过索引访问指定元素,并且如果重复添加相同值将不会增大集合。因为Set只是接口,所以实际用的是它的一个派生类HashSet。 集合的常用方法如下: add : 添加元素 clear : 清空容器 contains : 判断容器中是否存在该元素 iterator : 获取第一个元素的指针 isEmpty : 判断容器是否为空 remove : 删除元素 size : 获取容器大小
aqi00
2019-01-18
6050
Android开发笔记(二十七)对象序列化
程序中存储和传递信息,需要有个合适的数据结构,最简单的是定义几个变量,变量多了之后再分门别类,便成了聚合若干变量的对象。代码在函数调用时可以直接传递对象,但更多的场合例如与文件交互、与网络交互、组件之间交互等等,就无法直接使用未经处理的对象。因此Java引入了序列化的概念,用于把一个对象转换为字节序列,然后再对这个字节序列做存储和传递操作。与之对应的是反序列化,反序列化是把一个字节序列恢复为Java对象的过程,而序列化是把Java对象转化为字节序列的过程。
aqi00
2019-01-18
6270
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档