android
文章平均质量分 63
coder_soldier
这个作者很懒,什么都没留下…
展开
-
java.lang.ArithmeticException:divide by zero
今天测试点出个异常,看log还是第一次见,挺有意思记录一下。java.lang.ArithmeticException:divide by zero除数不能为零,请务必检查代码是否有机会出现除数为零的情况。简单来说就是分母为0。还好不是我写出来的,溜了溜了~...原创 2022-01-28 11:45:26 · 1540 阅读 · 0 评论 -
Android Jetpack 之CameraX(1.0.0-beta07)使用
CameraXCameraX 是一个 Jetpack 支持库,目的是为了简化相机应用开发工作。相比打开Camera2动不动就是上百行代码,CameraX使用起来是方便太多了。 本篇介绍Camerax的基本使用方法,以及从如何处理从camera获取到的图像数据(旋转转为nv12)。网上关于CameraX的博客基本上都是从官网翻译的,都是用的kotlin实现的,本篇使用的是java语言。使用 def camerax_version = "1.0.0-beta07" // CameraX core原创 2021-02-01 10:58:11 · 633 阅读 · 0 评论 -
Android设备之间投屏功能实现
简介简单实现两个android设备之间的投屏功能。设备间通信是通过局域网,需要连接同一个wifi。录屏用到系统的MediaProjection,MediaProjectionManager,而编解码用的是MediaCodec,所以设备需要有DSP芯片,大部分手机应该都有。两台设备间通信使用websocket,录屏端作为服务器进行推流,显示端就是客户端,收到码流进行解码并显示。先看看最终效果:实现首先需要先导入Java-WebSocket库,WebSocket是一种在单个TCP连接上进行全双工通信原创 2021-01-09 22:09:50 · 11557 阅读 · 26 评论 -
Android P 解决“从锁定屏幕中添加用户”功能不起作用
问题描述打开设置–>系统–>高级–>多用户,如下图所示:测试同事发现当没有启用这个功能时候,在锁屏页面还是可以添加新用户,默认是没有打开这个功能的。先看看锁屏页面,在锁屏页面调出下拉菜单:然后点击方框中的头像:可以进入这个页面,点击添加访客,可以进行切换,而此时设置中的从锁定屏幕中添加用户是禁止的状态,说明确实存在问题,那就跟代码吧。这里先说一下我的思路,先找到设置中设置从锁定屏幕中添加用户的代码,先确定点击点击按钮settings做了什么。因为锁屏属于systemUi模块原创 2021-01-04 16:10:10 · 938 阅读 · 0 评论 -
Android GifImageView加载Gif图片及原理
背景前几天看到个有趣的动图,本来下载下来想发给朋友看看的,但是用微信发送时候提示文件过大,一看竟然41M,于是就在想这么大的gif怎么加载的。所以就搞了个demo去试试。Glide众所周知Glide支持加载gif图片,所以一开始先使用Glide。将动图放到raw中,然后用Glide加载。Glide.with(this).load(R.raw.aa).into(gifImageView);然后等了半天一点反应也没有,就看见log一直在打印:Background young concurrent原创 2020-12-31 16:30:52 · 5008 阅读 · 11 评论 -
Android Jetpack 之Room使用
RoomRoom是Jetpack组件库一员,属于ORM库,Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。Room 包含 3 个主要组件:Database: 你可以使用这个组件创建一个数据库holder。注解定义了一系列entities并且类的内容提供了一系列DAOs,它也是下层的主要连接 的访问点。Database注解的类应该是一个抽象的继承 RoomDatabase的类。在运行时,你能获得一个实例通过调用Room.databa原创 2020-12-30 15:18:08 · 948 阅读 · 0 评论 -
Android Jetpack 之ViewModel使用
ViewModel之前写过了LiveData的使用,今天来了解下ViewModel的使用方法。ViewModel官方说明先看下官方对它的定义:ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。可以看出ViewModel就是一个存储数据的类。只是生命周期比较长一点。再借用官网一张图。可以看出在activity旋转过程中ViewModel是不会被销毁重建的,这就方便了我们广大程序猿了。再也不用去手动保存数据了,而原创 2020-09-17 16:49:19 · 601 阅读 · 0 评论 -
Android Jetpack 之LiveData使用及原理
LiveDataJetpack已经出来很久了,虽然挺好用但是说实话对其原理理解还是有限,所以抽空来研究一下Jetpack各个功能的原理。LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。通俗的说就是当liveData数据发生改变时,只有处于活跃状态的组件才能收到数据改变原创 2020-09-10 14:13:20 · 682 阅读 · 0 评论 -
Android SVG图片解析Demo
SVGSVG是一种图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。原创 2020-07-30 17:33:58 · 3714 阅读 · 2 评论 -
Android 自定义view实现一个方块矩阵
简介项目中要搞一个很多小方块组成的矩阵。然后可以上下波动。先看下效果图吧,就是酱紫:实现看到这个需求脑海中已经有个大概的思路了,在确定了行数和列数后绘制矩形就是了。下面贴上自定义view的代码。在这里插入代码片...原创 2020-07-28 17:52:58 · 625 阅读 · 0 评论 -
Android开发自定义ViewGroup流式布局
流式布局项目中有需求要用到流式布局,自己就自定义了一个FlowLayout,感觉还是有必要记录一下的。以下的代码是从项目里抽出来的,已经去掉了不相关的代码,如果有需要的话可以自己扩展。先看下最终效果吧。图中背景黄色部分就是我们的自定义ViewGroup,所谓流式布局最重要的一点就是可以换行。下面一起学习下怎么去实现这种布局吧。实现过程首先先思考一下如果要实现这种布局需要考虑什么,需要考虑viewgroup的宽高,如果是wrap_content的话就需要我们自己去测量出它的宽高。还要考虑子控件的m原创 2020-07-07 11:15:14 · 282 阅读 · 0 评论 -
Android 9.0 点击桌面应用图标,启动Activity的过程分析
下面分析从手指点击桌面的应用图标,是如何启动一个应用的Activity的过程:首先需要明确一个问题,我们的桌面Launcher其实也是一个Activity,它是继承BaseDraggingActivity,而BaseDraggingActivity也是通过层层继承,最终还是继承了Activity。当点击桌面应用图标时,会执行Launcher这个类的startActivitySafely方法,下面看看这个方法的实现:http://androidxref.com/9.0.0_r3/xref/packages转载 2020-06-19 17:03:34 · 862 阅读 · 0 评论 -
Android android.uid.system的应用调用安装apk失败
背景最近项目开发过程中用到安装apk的功能。把从服务器下载下来的apk安装到机器中。安装过程中遇到的问题记录一下。问题安装过程中提示解析软件包时出现问题。说明:本文是针对运行的apk在Manifest中声明了systemuid。如果你的应用声明了"android.uid.system",而且也遇到了这个问题,恭喜你找到了本文。android:sharedUserId="android.uid.system"没有声明的小伙伴可以去找别的博客了。安装apk首先回顾一下安装的方法,androi原创 2020-06-12 13:35:43 · 5483 阅读 · 17 评论 -
Android ButterKnife框架实现原理
介绍ButterKnife相信大家都很熟悉了,网上介绍其使用方法的文章很多,还不知道ButterKnife是啥的小伙伴可以先去了解一下。ButterKnife用一个注解就替代了findViewById方法。用起来非常方便,但是你有没有想过为啥就不用写findViewById方法了呢,难道代码就真的没有跑findViewById了吗。来来来,我们来自己手写一个ButterKnife,来学习一下他的技术。效果先看一下Demo的效果吧,先展示出来效果大家才有看下去的动力,毕竟光说不练假把式。上面代码原创 2020-06-03 15:41:07 · 441 阅读 · 0 评论 -
Android状态栏右侧添加图标并控制其显示状态
背景介绍最近接到一个需求。Android机器外接一个21key的键盘。键盘上有一个绿色和黄色按键。其功能就是当按下时,再按其他键会上报不同的键值。我们的外国合作伙伴就发现了一个问题,机器的页面上没有显示出按下绿键或者黄键的状态,就是说用户可能不知道当前键盘是在哪种输入状态。所以要求我们加上一个提示出来。先看下最终效果,当按下绿色按键后,显示一个g字母,表示green的意思,黄色按键就是y,yellow。思路介绍完背景了,就讲一下实现过程吧。其实刚开始我能想到的是直接加一个notificatio原创 2020-05-14 12:25:16 · 3040 阅读 · 3 评论 -
Android P SystemUi启动流程
本文代码基于Android 9.0分析,个人理解能力有限,如有不对请多指教。SystemUI是在开机过程中SystemServer启动的,SystemServer的startOtherServices()中/*frameworks/base/services/java/com/android/server/SystemServer.java*/private void startOtherS...原创 2019-11-21 15:46:17 · 436 阅读 · 0 评论 -
Android7.1.1 remap鼠标右键为返回键
需求:客户需求当手机连接鼠标时,可以有开关控制鼠标右键的行为的按钮,打开鼠标右键就为返回键,关闭保持原来行为。如果只是将右键改为返回键还是很好做的,找到点击右键的事件改一下就行,但是现在还需要控制,就涉及到交互的问题了。先看效果图。追踪代码到InputReader.cpp文件,位置frameworks/native/services/inputflinger/InputReader.cpp。熟...原创 2018-11-16 15:47:12 · 5464 阅读 · 8 评论