Android开发笔记(一百八十五)使用设备浏览器Device File Explorer导出存储卡的文件 只要打开了手机的USB调试功能,还是有办法拿到测试应用的数据文件。在上图所示的窗口中依次展开各级目录,一路进到/data/data/com.example.chapter06/shared_prefs,在该目录下看到了参数文件share.xml。
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.htm.
Android开发笔记(一百八十三)利用HMS轻松扫描二维码 扫描二维码是HMS的一项基础服务,虽然谷歌公司也提供了zxing扫码框架,但是zxing框架的集成步骤不够简洁,而且它的识别速度偏慢,识别准确率也不高,远不如HMS的扫码服务来得好用。下面介绍如何在App工程中集成HMS的扫码服务。
Android开发笔记(一百八十二)使用CameraX录像 通过CameraX实现录像功能的话,初始化相机的步骤与拍照时大同小异,区别在于增加了对视频捕捉器VideoCapture的处理。需要修改的代码主要有三个地方,分别说明如下。第一个地方是在AndroidManifest.xml里补充声明录音权限,完整的权限声明配置如下所示:<!-- 相机 --><uses-permission android:name="android.permission.CAMERA" /><!-- 录音 --><uses-perm
Android开发笔记(一百八十一)使用CameraX拍照 常言道,眼睛是心灵的窗户,那么相机便是手机的窗户了,主打美颜相机功能的拍照手机大行其道,可见对于手机App来说,如何恰如其分地运用相机开发至关重要。Android的SDK一开始就自带了相机工具Camera,从Android5.0开始又推出了升级版的camera2,然而不管是初代的Camera还是二代的camera2,编码过程都比较繁琐,对于新手而言有点艰深。为此谷歌公司在Jetpack库中集成了增强的相机库CameraX,想让相机编码(包括拍照和录像)变得更加方便。CameraX基于camera2开发,它
Android开发笔记(一百八十)使用Glide加载特殊图像 Android从9.0开始增加了新的图像解码器ImageDecoder,该解码器支持直接读取GIF文件的图形数据,结合图形工具Animatable即可在图像视图上显示GIF动图。虽然通过ImageDecoder能够在界面上播放GIF动画,但是一方面实现代码有些臃肿,另一方面在Android9.0之后才支持,显然不太好用。现在有了Glide,轻松加载GIF动图不在话下,简简单单只需下面一行代码:Glide.with(this).load(R.drawable.happy).into(iv_cover)
Android开发笔记(一百八十)使用Glide加载特殊图像 Android从9.0开始增加了新的图像解码器ImageDecoder,该解码器支持直接读取GIF文件的图形数据,结合图形工具Animatable即可在图像视图上显示GIF动图。虽然通过ImageDecoder能够在界面上播放GIF动画,但是一方面实现代码有些臃肿,另一方面在Android9.0之后才支持,显然不太好用。现在有了Glide,轻松加载GIF动图不在话下,简简单单只需下面一行代码:Glide.with(this).load(R.drawable.happy).into(iv_cover)
Android开发笔记(一百七十九)避免方法数过多的问题 一个大规模的App工程,往往引入了数量繁多的第三方开发库,其中既有官方的Jetpack库,也有第三方厂商的开源包。有时候运行这种App会报错“Cannot fit requested classes in a single dex file (# methods: 65894 > 65536)”,意思是App内部引用的方法数量超过了65536个,导致App异常退出。原来Android的每个App代码都放在一个dex文件中,系统会把内部方法的索引保存在一个链表结构里,由于这个链表的长度变量是short
Android开发笔记(一百七十八)更安全的数据仓库DataStore 虽然SharedPreferences用起来比较方便,但是在一些特殊场景会产生问题。比如共享参数保存的数据较多时,初始化共享参数会把整个文件加载进内存,加载耗时可能导致主线程堵塞。又如调用apply方法保存数据时,频繁apply容易导致线程等待超时。为此Android官方推出了数据仓库DataStore,并将其作为Jetpack库的基础组件。DataStore提供了两种实现方式,分别是Preferences DataStore 和Proto DataStore,前者采用键值对存储数据,后者采用自定义类型存储
《Android App开发进阶与项目实战》出版后记 《Android App开发入门与项目实战》刚写完,我马上着手编写它的姊妹篇《Android App开发进阶与项目实战》,因为开发入门一书比较基础,还需要一本讲解高级开发与新技术的进阶书籍。App开发入门与App开发进阶两本图书同时也是对《Android Studio开发实战 从零基础到App上线(第2版)》的全面升级,堪称《Android Studio开发实战》的第3版。开发实战原有16章内容,而App开发入门有15章,App开发进阶有13章,两本相加总共28章,比起开发实战足足多出了12章内容,可谓
Android开发笔记(一百七十七)借助FileProvider安装应用 除了发送彩信需要文件提供器,安装应用也需要FileProvider。不单单彩信的附件图片能到媒体库中查询,应用的APK安装包也可在媒体库找到。查找安装包依然借助于内容解析器,具体的实现过程和查询图片类似,比如事先声明如下的对象变量:private List<ApkInfo> mApkList = new ArrayList<ApkInfo>(); // 安装包列表private Uri mFilesUri = MediaStore.Files.getContentUri("e
Android开发笔记(一百七十六)借助FileProvider发送彩信 通过系统相册固然可以获得照片的路径对象,却无法知晓更多的详细信息,例如图片名称、文件大小、文件路径等等都不知道,也就无法进行个性化的定制开发。为了把更多的文件信息开放出来,Android设计了专门的媒体共享库,允许开发者通过内容组件从中获取更详细的媒体信息。就图片而言,相册媒体库的路径为MediaStore.Images.Media.EXTERNAL_CONTENT_URI,于是通过内容解析器即可从媒体库依次遍历得到图片列表详情。为便于代码管理,首先要声明如下的对象变量:private List&l
《Android App开发入门与项目实战》资源下载和内容勘误 资源下载下面是《Android App开发入门与项目实战》一书用到的工具和代码资源:1、本书使用的Android Studio版本为4.1,最新的安装包可前往Android官网页面下载。2、本书提供所有示例源码的demo工程下载,源码(适配Android4.4到Android11)的下载方式见该书前言末尾的二维码,获取ppt课件同样扫描前言末尾的二维码。最新的源码也可访问我的github获取,github地址是https://github.com/aqi00/myapp,服务端的github地址是h
Android开发笔记(一百七十五)利用Room简化数据库操作 虽然Android提供了数据库帮助器,但是开发者在进行数据库编程时仍有诸多不便,比如每次增加一张新表,开发者都得手工实现以下代码逻辑:1、重写数据库帮助器的onCreate方法,添加该表的建表语句;2、在插入记录之时,必须将数据实例的属性值逐一赋给该表的各字段;3、在查询记录之时,必须遍历结果集游标,把各字段值逐一赋给数据实例;4、每次读写操作之前,都要先开启数据库连接;读写操作之后,又要关闭数据库连接;上述的处理操作无疑存在不少重复劳动,数年来引得开发者叫苦连连。为此各类数据库处理框架纷纷涌现,
5G时代的Android App开发入门与项目实战 随着移动互联网的持续发展,Android系统从智能手机逐步拓展到平板电脑、智能电视、车载大屏、智能家居、智能手表等诸多设备,Android开发依然是前景可期的IT岗位。当然,整个社会正在迈向5G时代,这对新手学习Android开发构成了不小的挑战,如果新手仍旧按照几年前的Android书籍学习,就会发现学完之后学不到什么新技术。即使是Android初中级工程师,可能局限于平时的工作内容,也不容易接触新理念新潮流。在5G时代,Android App开发需要发挥5G优势给用户带来新体验、增添新功能、用得更省