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

老欧说安卓

专栏作者
251
文章
402828
阅读量
77
订阅数
Android开发笔记(一百九十)增强了日志功能的第二版Logcat
从Android Studio Dolphin开始,查看应用日志的Logcat全面升级,堪称Logcat 2.0版本。下面就让我们看看LogcatV2.0究竟带来了什么新特性吧。 对于Android Studio的老用户来说,小海豚版本新出的LogcatV2.0在用法上有不小的差异,一开始会让人比较茫然。有些老用户可能更习惯之前的Logcat,可以通过以下办法关闭LogcatV2.0,重新启用旧的Logcat功能。 打开Android Studio,依次选择菜单“File”——“Settings”,在弹出的设置窗口的左侧列表选择最后一项“Experimental”,接着在窗口右边找到Logcat区域,把“Enable new Logcat tool windows”的复选框取消勾选,表示禁用新版的Logcat窗口,设置窗口如下图所示。
aqi00
2022-12-31
1.3K0
《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
3110
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.4K0
Android开发笔记(一百八十八)工作管理器WorkManager
Android11不光废弃了AsyncTask,还把IntentService一起废掉了,对于后台的异步服务,官方建议改为使用工作管理器WorkManager。 其实除了IntentService之外,Android也提供了其它后台任务工具,例如工作调度器JobScheduler、闹钟管理器AlarmManager等等。当然这些后台工具的用法各不相同,徒增开发者的学习时间而已,于是乎谷歌索性把它们统一起来,在Jetpack库中推出了工作管理器WorkManager。这个WorkManager的兼容性很强,对于Android6.0或更高版本的系统,它通过JobScheduler完成后台任务;对于Android6.0以下版本的系统(不含Android6.0),通过AlarmManager和广播接收器组合完成后台任务。不过无论采取哪种方案,后台任务最终都是由线程池Executor执行。 因为WorkManager来自Jetpack库,所以使用之前要修改build.gradle,增加下面一行依赖配置:
aqi00
2022-11-02
8800
Android开发笔记(一百八十七)利用估值器实现弹幕动画
如今上网看电影电视越发流行了,追剧的时候经常看到视频上方数行评论向左边飘去,犹如子弹那样飞快掠过,这些评论文字因此得名“弹幕”。弹幕评论由正在观看的网友们即兴发表,故而连绵不绝从画面右端不断涌现,直到漂至画面左端才隐没消失。 虽然弹幕效果可使用平移动画实现,但平移动画比较单调,只能控制位移,不能控制速率、文字大小、文字颜色等要素。若想同时操纵视图的多种属性要素,需要采用属性动画加以实现。 然而视图的位移大小由间距属性margin控制,该属性又分为上下左右四个方向,更要命的是,这几个margin并非视图View类的属性,而是布局参数LayoutParams的属性,意味着无法通过margin***直接构造属性动画对象。为了动态调整margin这种非常规属性,就要引入估值器实时计算当前的属性值,再据此设置自定义控件的状态参数。 以间距属性为例,它的动画步骤说明如下: 1、定义一个间距估值器,它实现了接口TypeEvaluator的evaluate方法,并在该方法中返回指定时间点的间距数值; 2、调用ValueAnimator类的ofObject方法,根据间距估值器、开始位置和结束位置构建属性动画对象; 3、调用属性动画对象的addUpdateListener方法设置刷新监听器,在监听器内部获取当前的间距数值,并调整视图此时的布局参数; 具体到编码实现上,需要自定义弹幕视图,其内部在垂直方向排列,每行放置一个相对布局。发表弹幕评论时,先随机挑选某行相对布局,在该布局右侧添加文本视图,再通过前述的间距动画向左渐次滑动。弹幕视图的定义代码示例如下:
aqi00
2022-10-05
4630
Android开发笔记(一百八十六)管理SQLite的利器——应用检查器App Inspection
App开发涉及SQLite操作的时候,往往需要查看数据库保存的记录信息,最好能对数据记录手工增删改,类似使用PL/SQL管理Oracle,或者使用Navicat管理MySQL。可是以往Android系统难以手工操作SQLite,要么通过代码实现记录的增删改查;要么先把设备里的数据库db文件导出到电脑,然后使用SQLiteStudio等工具操作db文件中的记录。可见,无论采用上述的哪种方式,都不能方便快捷地管理SQLite数据库。 好在从Android Studio Bumblebee开始,Android Studio正式全面开启了数据库管理功能。首先确保已经安装了最新版的Android Studio Bumblebee,打开电脑上的Android Studio,并通过USB数据线连接待调试的设备(设备上同时启动待调试的应用)。然后依次选择菜单“View”→“Tool Windows”→“App Inspection”,Android Studio界面下方会弹出“App Inspection”窗口,在该窗口选择设备名称,以及设备上的调试应用名称,如下图所示。
aqi00
2022-09-27
1.7K0
Android开发笔记(一百八十五)使用设备浏览器Device File Explorer导出存储卡的文件
之前在介绍SharedPreferences的时候提到,共享参数的存储路径为“/data/data/应用包名/shared_prefs/***.xml”,然而使用手机自带的文件管理器,根本就找不到该路径,data下面只有空目录而已。这是因为手机厂商加了层保护,不让用户查看App的核心文件,否则万一不小心误删了,App岂不要运行报错呢?当然作为开发者,只要打开了手机的USB调试功能,还是有办法拿到测试应用的数据文件。 首先打开Android Studio,依次选择菜单Run→Run '***',把测试应用比如chapter06安装到手机上。接着单击Android Studio左下角的logcat标签,找到已连接的手机设备和测试应用,如下图所示。
aqi00
2022-09-21
8630
Android开发笔记(一百八十四)利用TBS浏览各种文档
 虽然使用POI库可以解析并显示Office文档,但这需要开发者自己搭个服务器,确实多有不便。倘若只是简单的浏览文档内容,完全可以利用第三方的开发包直接渲染,比如腾讯的TBS服务(全称Tencent Browser Service,即腾讯浏览服务)。通过集成TBS服务,App能够直接打开下列文件格式:doc、docx、ppt、pptx、xls、xlsx、pdf、txt、epub,可谓中小开发者的一大福音。 TBS官网的接入说明网址为https://x5.tencent.com/docs/access.html,下面也简要介绍一下如何在App中快速集成TBS服务。 首先打开App模块的build.gradle,往dependencies节点添加下列配置,表示导入TBS工具库:
aqi00
2022-05-11
1.4K0
Android开发笔记(一百八十三)利用HMS轻松扫描二维码
开源的Android系统实际上只提供基本的系统服务,不提供常见的扩展服务诸如地图、邮箱、搜索、推送、机器学习、应用内支付等,这些扩展服务被谷歌公司打包成GMS套件(全称Google Mobile Service,中文名叫谷歌移动服务)。在海外市场,许多商用App都依赖于GMS提供的服务,手机缺少GMS会使得这些App没法使用,而手机厂商预装GMS套件需要获得谷歌公司授权。2019年华为公司遭到美国制裁,导致华为手机没能获得GMS授权,致使海外市场陷入寒冬。为此,华为公司推出了自主可控的HMS套件(全称Huawei Mobile Service,中文名叫华为移动服务),意图打破制裁。 HMS是华为公司提供的一套App扩展服务框架,它分为两部分,一部分是面向普通用户的预装App,包括花瓣地图、花瓣邮箱、花瓣搜索、花瓣支付等;另一部分是面向开发者的HMS Core,它给开发者提供API接口,用于在App开发时集成相关服务。HMS Core是华为移动服务提供的端、云开放能力的合集,包含华为账号、应用内支付、推送服务、游戏服务、定位服务、地图服务、广告服务和机器学习服务等,它的开源代码仓库地址为https://gitee.com/hms-core,开发者可在该仓库下载对应源码学习。 扫描二维码是HMS的一项基础服务,虽然谷歌公司也提供了zxing扫码框架,但是zxing框架的集成步骤不够简洁,而且它的识别速度偏慢,识别准确率也不高,远不如HMS的扫码服务来得好用。下面介绍如何在App工程中集成HMS的扫码服务。 首先,因为扫码属于第三方服务,所以要修改模块的build.gradle,往dependencies节点添加如下一行配置,表示导入指定版本的扫码库:
aqi00
2022-05-11
9640
Android开发笔记(一百八十二)使用CameraX录像
通过CameraX实现录像功能的话,初始化相机的步骤与拍照时大同小异,区别在于增加了对视频捕捉器VideoCapture的处理。需要修改的代码主要有三个地方,分别说明如下。 第一个地方是在AndroidManifest.xml里补充声明录音权限,完整的权限声明配置如下所示:
aqi00
2022-03-09
1.1K0
Android开发笔记(一百八十一)使用CameraX拍照
常言道,眼睛是心灵的窗户,那么相机便是手机的窗户了,主打美颜相机功能的拍照手机大行其道,可见对于手机App来说,如何恰如其分地运用相机开发至关重要。 Android的SDK一开始就自带了相机工具Camera,从Android5.0开始又推出了升级版的camera2,然而不管是初代的Camera还是二代的camera2,编码过程都比较繁琐,对于新手而言有点艰深。为此谷歌公司在Jetpack库中集成了增强的相机库CameraX,想让相机编码(包括拍照和录像)变得更加方便。CameraX基于camera2开发,它提供一致且易用的API接口,还解决了设备兼容性问题,从而减少了编码工作量。 不管是拍照还是录像,都要在AndroidManifest.xml中添加相机权限,还要添加存储卡访问权限,如下所示:
aqi00
2022-03-09
1.4K0
Android开发笔记(一百八十)使用Glide加载特殊图像
Android从9.0开始增加了新的图像解码器ImageDecoder,该解码器支持直接读取GIF文件的图形数据,结合图形工具Animatable即可在图像视图上显示GIF动图。虽然通过ImageDecoder能够在界面上播放GIF动画,但是一方面实现代码有些臃肿,另一方面在Android9.0之后才支持,显然不太好用。现在有了Glide,轻松加载GIF动图不在话下,简简单单只需下面一行代码:
aqi00
2022-03-09
1.1K0
Android开发笔记(一百七十九)避免方法数过多的问题
一个大规模的App工程,往往引入了数量繁多的第三方开发库,其中既有官方的Jetpack库,也有第三方厂商的开源包。有时候运行这种App会报错“Cannot fit requested classes in a single dex file (# methods: 65894 > 65536)”,意思是App内部引用的方法数量超过了65536个,导致App异常退出。 原来Android的每个App代码都放在一个dex文件中,系统会把内部方法的索引保存在一个链表结构里,由于这个链表的长度变量是short类型(short类型的数字占两个字节共16位),使得链表的最大长度不能超过65536(2的16次方),因此App方法数超过65536的话,链表索引溢出就报错了。为了解决方法数过多的问题,Android推出了名叫MultiDex的解决方案,也就是在打包时把应用分成多个dex文件,每个dex的方法数量均不超过65536个,由此规避了方法数过多的限制。 若想让App工程支持MultiDex,需要对其略加改造,具体改造步骤说明如下。 首先要修改模块的build.gradle文件,往dependencies节点添加下面一行配置,表示导入指定版本的MultiDex库:
aqi00
2022-03-09
2910
Android开发笔记(一百七十)给App的应用页面注册快捷方式
元数据不单单能传递简单的字符串参数,还能传送更复杂的资源数据,从Android7.1开始新增的快捷方式便用到了这点,譬如在手机上桌面长按支付宝图标,会弹出如下图所示的菜单。
aqi00
2022-03-09
6780
Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏
在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择“New”——“Activity”——“Bottom Navigation Activity”,弹出下图所示的活动创建页面。
aqi00
2022-03-09
1.2K0
Android开发笔记(一百六十八)为应用绑定通知渠道并展示消息角标
为了分清消息通知的轻重缓急,从Android8开始新增了通知渠道,并且必须指定通知渠道才能正常推送消息。一个应用允许拥有多个通知渠道,每个渠道的重要性各不相同,有的渠道消息在通知栏被折叠成小行,有的渠道消息在通知栏展示完整的大行,有的渠道消息甚至会短暂悬浮于屏幕顶部,有的渠道消息在推送时会震动手机,有的渠道消息在推送时会发出铃声,有的渠道消息则完全静默推送,这些提示差别都有赖于通知渠道的特征管理。如果不考虑定制渠道特性,仅仅弄个默认渠道好推送消息,那么只需以下三行代码即可创建默认的通知渠道:
aqi00
2022-03-09
1.6K0
Android8.0、9.0、10.0、11.0的新特性兼容适配代码修改
《Android Studio开发实战 从零基础到App上线(第2版)》在书后面的附录中给出了Android8和Android9的主要特性说明,附录表格如下图所示:
aqi00
2022-03-09
9410
Android 12的行为变更和版本兼容思路
一年一度的产品线兼容活动又开始了。Android系统每更新一次系统,对开发者而言都是持续而漫长的挑战。
aqi00
2022-01-05
4.3K0
Android开发笔记(一百七十八)更安全的数据仓库DataStore
虽然SharedPreferences用起来比较方便,但是在一些特殊场景会产生问题。比如共享参数保存的数据较多时,初始化共享参数会把整个文件加载进内存,加载耗时可能导致主线程堵塞。又如调用apply方法保存数据时,频繁apply容易导致线程等待超时。为此Android官方推出了数据仓库DataStore,并将其作为Jetpack库的基础组件。DataStore提供了两种实现方式,分别是Preferences DataStore 和Proto DataStore,前者采用键值对存储数据,后者采用自定义类型存储数据,其中Preferences DataStore可以直接替代SharedPreferences。 由于DataStore并未集成到SDK中,而是作为第三方框架提供,因此首先要修改模块的build.gradle文件,往dependencies节点添加下面两行配置,表示导入指定版本的DataStore库:
aqi00
2022-01-05
8650
Android开发笔记(一百七十七)借助FileProvider安装应用
除了发送彩信需要文件提供器,安装应用也需要FileProvider。不单单彩信的附件图片能到媒体库中查询,应用的APK安装包也可在媒体库找到。查找安装包依然借助于内容解析器,具体的实现过程和查询图片类似,比如事先声明如下的对象变量:
aqi00
2022-01-05
5300
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档