安卓技术分享
文章平均质量分 54
技术承载梦想
兴趣才是最好的老师,跟随它的脚步一步一个脚印...
展开
-
安卓电量检测工具Battery Historian的使用记录
安卓电量检测原创 2023-05-18 18:53:38 · 193 阅读 · 0 评论 -
【安卓】安卓设备实现wifi display解决方案
通过演示上面的Demo我们发现Wifi direct技术原理是底层实现了Scoket链接,它是可以替代蓝牙传输的技术实现,传输效率快蓝牙传输100倍,但是也有缺点就是功耗高(耗电)。安卓手机用户都知道我们的安卓手机有一个wifi直连功能,在点击设置–》WIFI–》更多Wifi设置–》Wifi直连;安卓手机默认有source端的api,只是没有暴露出来给开发者,这也是我们在Google开发者文档看不到的原因,我们如果想要调用,需要通过反射的方式(有技术实现难度,而且各个手机厂商的api有可能被定制化了)。原创 2023-02-28 21:35:58 · 2848 阅读 · 0 评论 -
Git命令: rebase 和 squash命令
rebase的用法普通合并代码容易产生merge提交如:把主干代码合到个人开发分支(有可能会产生一次merge提交)当前分支:master_zhang3执行:git merge master采用rebase把主干代码合到个人开发分支,并会把master_zhang3分支的提交拉到最近一个节点当前分支:master_zhang3git merge master --rebase比如master有提交点 1,2,3此时master_zhang3分支有 1,2,4结果:1,2,3,4原创 2020-11-05 18:05:19 · 3933 阅读 · 0 评论 -
安卓适配安卓9.0手机颜色变浅的问题
最近遇到一个手机适配问题,就是同样的一个app运行在安卓9.0手机上的显示和安卓其他设备上的颜色比较浅。因为项目是通过TextureView来绘制界面图像的,所以我只能先去了解这个类相关的Api,试图通过更改Windows的系统色来更改Textureview绘制的背景色,后面发现自己错误的理解的Textureview.我们做安卓开发最熟悉的就是View树,所有的安卓控件都继承自View,包括V...原创 2020-03-05 16:55:44 · 1096 阅读 · 0 评论 -
安卓开发:第三方数据库(从GreenDao到ObjectBox)集成之路。
GreenDao官网:学习方法3步骤:第一找原生文档,第二看视频,第三看博客。ORM百度百科:对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。GreenDao:安卓针对你SQLite数据库的关系对象映射。提示:对于新的应用,我们推荐ObjectBox,一个新的比SQL...原创 2020-02-28 12:33:47 · 2116 阅读 · 0 评论 -
安卓集成友盟分享,显示设备无分享权限的问题解决。
App开发我们少不了需要集成分享功能,app引流和app拉新都需要用户分享。我们开发分享功能可以使用安卓原生的分享功能,但是会有局限性,我们无法分享多媒体类型,只是分享纯文本信息。使用第三方我们比较常用的有友盟和shareSdk。这里需要我们弄清楚一个概念,就是第三方平台的分享,其实有自己的分享功能代码,但是我们为了省时间,就会通过集成像友盟或者是ShareSDK这样的第三方平台进行开发,然...原创 2020-02-24 18:31:22 · 1345 阅读 · 0 评论 -
解决集成百度定位SDK获取不到定位信息的问题
我们很多场景都需要获取用户的定位信息,包括使用友盟统计,其实也会根据设备的定位信息来分析用户的使用行为。1)集成百度推送,需要打开百度开发文档,并且注册账户。2)根据开发文档下载基础定位的SDK。3)根据开发文档集成jar包之后,贴上基础定位的代码。4)这里需要获取应用的AppKey,这里需要根据App的keyStore来获取签名的Mc5值,这里就会把应用包名和Appkey进行关联。5)...原创 2020-02-24 18:11:01 · 1375 阅读 · 1 评论 -
安卓解决包冲突问题。
在安卓开发中,当我们项目中依赖的远程包里面有一模一样的包存在时就会导致包冲突,我们常用的解决方式就是删除任意包里面的包的方式解决冲突。android studio也告诉了我们如何添加编译依赖项,我们只要按照规范来操作就可以了。排除不需要的依赖项的写法:dependencies { implementation('some-library') { exc...原创 2019-12-24 11:42:59 · 3856 阅读 · 1 评论 -
安卓网络框架搭建答疑
在安卓开发中,我们从之前使用安卓6.0的HttpClient,到使用HttpUrlConnection替代HttpClient,再到使用各种第三方网络请求框架实现网络请求。网络请求比较热门的第三方开源框架有HttpUtils、Vollery、OkHttpUtils等。但是目前比较火的还是网络请求的混合三打Rxjava+Okhttp+Retrofit。而且我们用过的都知道这三个框架各有各的职责,相辅...原创 2019-12-24 09:47:59 · 228 阅读 · 0 评论 -
解决安卓手机竖向拍照后,图像横屏展示的问题。
安卓手机调用系统的相机拍照之后,本来应该是根据你手机的拍照方向,预览照片应该是根据你手持手机的方向不一样而不一样。但是现在就有一个问题,华为手机是正常的,但是像Vivo和小米手机跳用系统的相机拍照之后,显示的预览图是横屏的。首先试着解决Activity的显示方式只能是竖屏:android:screenOrientation="portrait"发现加上之后华为是可以正常显示的,但是小米和v...原创 2019-12-18 13:22:05 · 15571 阅读 · 0 评论 -
ScreenMatch屏幕适配:Iphone6的切图如何适配Android?
之前进行安卓开发的时候遇到一个屏幕适配的问题:Ui给的图片是以iphone6(1920*1080)尺寸做的设计稿,界面是一个弹窗,弹窗背景是一张整图。如果以整图为背景,然后在上面进行控件布局就会出现控件会有偏移的问题。例如上图里面的用户头像,背景图限定了它的显示位置必须是在小黑框内,如果你设置ImageView的位置不正确的话,就会有偏差导致头像无法正确的先是在背景图限定的小黑框内。但是目前遇...原创 2019-12-13 14:06:11 · 509 阅读 · 0 评论 -
Android面试必备知识点
安卓面试最主要的就是四大组件:Handler异步消息机制:意义:Handler是为了实现线程间通信的。1)在使用handler的时候,在创建handler的线程需要维护一个唯一的Looper对象, 每个线程对应一个Looper,每个线程的Looper通过ThreadLocal来保证。2)Looper对象的内部又维护有唯一的一个MessageQueue,所以一个线程可以有多个handl...原创 2019-11-19 16:59:48 · 211 阅读 · 0 评论 -
安卓仿支付宝信用评分体系动画图
安卓开发中,我们少不了自定义控件,现在有一个需求,就是根据学生的阅读六要素建立类似支付宝信用评分体系的动画效果,实现效果如下图:Demo的成功完成是借鉴下面这篇博客:Android 仿支付宝9.0芝麻信用分效果,项目代码已经提交到本人Github,有兴趣的可以下载,欢迎Star!package com.fenjiread.learner.activity.widget;import an...原创 2019-11-08 16:46:36 · 652 阅读 · 0 评论 -
解决安卓手机动画效果无效问题
系统版本:andfroid版本9、手机型号:MHA-AL00、设备名称:HUAWEI Mata 9.测试代码: mFristBtn.setOnClickListener { val valueAnimator = ValueAnimator.ofInt(0,1000) valueAnimator.duration = 1000 ...原创 2019-05-16 15:54:17 · 4642 阅读 · 4 评论 -
安卓开发实现自动化测试遇到的问题解决
目前安卓开发进入了项目的空窗期,项目的迭代速度变慢,需要我们开发人员进行代码的优化和重构。在安卓开发中,开发人员和测试人员的配合默契程度直接会导致产品上线是否合格、是否会出现严重的项目崩溃、是否会出现产品功能的缺失,这些都和开发人员开发的时候,是否有跟测试人员沟通测试的边际和测试人员设计的测试用例是否存在功能缺失等问题。总之一句话,测试是否过关直接可以影响用户对产品的使用。线上产品出现问题,首先背...原创 2019-06-17 11:39:33 · 2496 阅读 · 5 评论 -
安卓播放器实现后台播放服务
安卓开发,除了我们经常写的Activity、Fragment等显示给用户的控件外,我们还可能需要程序在退出到后台的时候,继续给用户提供服务的功能,这里就需要用到Android的服务Service。安卓服务是对用户不可见的,它没有界面,只是开启了一个在后台持续运行的线程,就算用户退出到后台,只要不停止服务,服务就可以继续为用户提供服务。不像Activity会有固定的生命周期,当用户把程序退出到后台...原创 2019-06-11 17:17:15 · 6095 阅读 · 0 评论 -
安卓开发人员学习小程序笔记
学习有没有捷径可以走呢?从事安卓软件开发这个职业有5年了,从学校毕业到进入社会工作,我们的老师和父母都一直教导我们做事情要老老实实的,一步一个脚印的去努力。社会变更的速度不是我们这些年轻人可以追上的,更何况是学习计算机技术,在你稳稳的睡觉的时候,热爱编程的程序正在更新一项又一项的新技术、新的开源框架、新的计算机语言,学习似乎是一件不能拒绝的事情,要么就接受淘汰吧!3年前,亲戚让我给他开发一个...原创 2019-06-20 20:39:50 · 564 阅读 · 2 评论 -
安卓本地缓存数据管理工具类
安卓开发有时候需要保存数据到手机本地,这样就可以减少重复请求后台获取数据的麻烦。安卓缓存方式有5种,远端缓存数据就是后台服务器帮我们保存数据;近端的客户端缓存有三种。第一种就是SharePreference缓存,这也是我们安卓开发用的最多的客户端缓存方式,特别就是比较简单: val sharedPreferences = getSharedPreferences(...原创 2019-06-19 15:42:02 · 1971 阅读 · 0 评论 -
安卓适配刘海屏手机
在安卓开发中,我们除了需要适配不同手机的手机分辨率外,还需要适配手机上的虚拟状态栏和导航栏的高度,这其中又不乏有一些手机的手机屏幕格外的与众不同,比如今天我们需要了解的“刘海屏”。什么是“刘海屏”?屏幕的正上方居中位置(下图黑色区域)会被挖掉一个孔,屏幕被挖掉的区域无法正常显示内容,这种类型的屏幕就是刘海屏,也有其他叫法:挖孔屏、凹凸屏等等,这里统一按刘海屏命名。目前网上也有很多适配安卓手机“刘...原创 2019-05-16 13:52:03 · 654 阅读 · 0 评论 -
MVVM架构模式解析
Mvvm定义MVVM是Model-View-ViewModel的简写。即模型-视图-视图模型。【模型】指的是后端传递的数据。【视图】指的是所看到的页面。【视图模型】mvvm模式的核心,它是连接view和model的桥梁。它有两个方向:一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方...原创 2019-05-29 14:42:43 · 492 阅读 · 0 评论 -
集成MVVMHabit开源框架的常见问题
在学习了最火的安卓Mvvm架构模式之后,我们想通过远程的方式来集成mvvmhabit这个框架,下面就是我遇到的一些集成问题,希望对大家有用。../../../.gradle/caches/transforms-1/files-1.1/appcompat-v7-28.0.0.aar/369205b9ef94f35037ab9e659bb394fa/res/values/values.xml e...原创 2019-05-23 18:07:28 · 3620 阅读 · 0 评论 -
安卓无法使用monkey测试手机App
突然使用安卓monkey命令测试手机App,突然报错如下:保持日志信息如下:Android :java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission检查手机App代码和重新创建一个项目也一样的结果,最后定位问题是因为测试手机把手机的开发者选项的“允许US...原创 2019-05-17 19:10:41 · 1094 阅读 · 0 评论 -
安卓自定义边栏英文索引控件
/** * 成员信息列表 -右侧的导航条 */class EnglishIndexBar @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) { private var ...原创 2019-05-17 18:59:29 · 1108 阅读 · 0 评论 -
最火开源框架MVVMHabit的简单集成使用
目前项目需要使用Mvvm架构模式重构项目,因为之前没有使用过Mvvm架构模式,并且这种架构模式也是基于Google提供的data banding 和AAC架构模型来搭建的,所以就只能去找一个已经集成好的开源框架来研究分析一下Mvvm架构模式的具体实现是怎么样的?在Github搜索Mvvm,然后选择java语言,于是就有了我们今天要分析的Mvvm框架:MVVMHabit.下载框架之后,感觉项目也非...原创 2019-05-22 18:21:35 · 15900 阅读 · 12 评论 -
安卓手机内置NFC模块的使用和开发
安卓手机内置了Nfc链接模块,属于安卓手机链接方式的一种,只要我们的手机打开Nfc功能,然后让手机的背面贴近具有内置IC卡的卡,安卓手机就可以唤醒手机的Nfc监听事件的App,然后建立链接,成功读取ic卡的参数信息。能够唤醒手机Nfc监听App的两个条件是:1)手机系统内置了Nfc模块,也就是手机需要支持Nfc功能。2)卡需要内置ic卡芯片,不能是磁条卡上面的图片是使用小米MX2贴近城...原创 2019-06-21 18:15:22 · 8165 阅读 · 0 评论 -
解决Android Studio创建Flutter项目异常
Android Studio成功集成Flutter插件以后,就可以新建一个Flutter项目了。创建Flutter项目成功之后,运行Flutter项目出现如下异常:* Where:Build file '/Users/guotianhui/Downloads/flutter_app2/flutter_appw2/android/app/build.gradle' line: 25* Wha...原创 2019-06-18 11:49:47 · 16924 阅读 · 3 评论 -
android studio java开发环境转Kotlin开发环境
作为一名习惯用Java开发者,我们都知道我们的的安卓开发环境需要设置SDK(Software Development Kit)和JDK(Java Development Kit)。 SDK设置的是安卓Framwork层的框架源码,不如我们需要开发一个界面Activity、Service、需要播放一段视频或者音乐,都是需要调用Framwor框架源码的Api,也就是我们设置的SDK路径。JDK则是设置...原创 2019-07-01 15:22:36 · 3758 阅读 · 0 评论 -
安卓View的事件分发
安卓的事件分发机制使界面显示的控件能够响应用户的点击、长按、拖拽、快滑等操作。但是如果对事件分发的原理理解不深,有时候就会有一些困扰。比如:事件冲突导致内嵌的控件无法响应事件等,如何Activity设置多层布局后,外层布局获取到焦点,导致内嵌的控件事件没有执行等。 比较好的博客:http://blog.csdn.net/xyz_lmn/article/details/12517911 安卓除原创 2017-03-22 16:06:53 · 215 阅读 · 0 评论 -
android studio设置Flavor的dimension注意细节问题。
前言在安卓开发中,我们都知道android studio的多渠道打包功能使用起来非常的快速、便捷。但是我们设置多渠道的时候需要一个问题:选中项目–》右键–》Open Module Settings异常显示是我们的渠道包设置没有设置对应的Flavor导致异常,这个异常虽然不会影响我们正常的运行和打包。所以你如果没时间去解决也是可以的。之前我也搞不懂到底要怎么设置这个Flavor才能不报错,后...原创 2019-09-20 18:39:25 · 6854 阅读 · 0 评论 -
Java:如何通过代码判断字符是拼音还是英文单词?
最近安卓项目开发中遇到一个问题,在使用百度语音合成的功能时,因为文章里面带有拼音注解,导致文字和拼音被重复读了一遍。中国人民(zhōng guó rén mín )现在的需求是需要识别文章中的汉语拼音,然后去掉,不让文章拼音被语音合成。那么问题就出现了:Java如何通过代码识别字符串是否是汉语拼音,还是英文单词?比如:中国人民,这个汉语拼音是zhōng guó rén mín,但是如果写成...原创 2019-09-03 18:32:15 · 5020 阅读 · 0 评论 -
如何提高友盟推送的消息到达率
无意间看到了友盟微信公众号的一篇推送,文章名字叫“你的消息到达率是多少?“,这是一篇关于友盟推送的消息推文,大概说明了友盟推送消息送达到手机的过程中的有关影响因素。然后总结出:提高手机收到率的三个方法:三、提升收到率的方法:方法一:提高App的在线活跃用户数;对于Android平台,收到率其实都是和App自身日活比例呈正相关的,App日活度不高,那么收到率也不会太高。方法二:增加离线Ap...原创 2019-07-31 10:41:50 · 2431 阅读 · 0 评论 -
RecyclerView仿GridView实现一个可以拖动Item删除效果
安卓开发中,我们知道网格布局使用GirdLayout,实现网格布局的组件是GridView。现在项目需要实现如下图的一个功能:中间的图片显示我们可以设计3中实现方式:1)使用GridLayout添加ItemView的方式2)使用GridViewx控件,通过Adapter来控制显示的界面3)使用RecyclerViewk控件,通过设置GridLayoutManager来设置Item的显示方...原创 2019-07-25 18:36:43 · 711 阅读 · 0 评论 -
BaseRecyclerViewAdapterHelper添加headerView之后,头部数据更新后,界面没反应。
感谢开源项目作者 BaseRecyclerViewAdapterHelper解决了写复杂的RecyclerView的Adapter问题。但是目前遇到一个问题无法解决: 正常的RecyclerView设置setEnptyView之后能正常显示,但是如果是这个RecyclerView设置了HeaderView之后,因为监听的是列表数据的变化,就会出现头部数据变化了之后,调用notifyDataSetC...原创 2019-07-25 16:01:21 · 7474 阅读 · 0 评论 -
android studio升级到最新版本3.4.1 如何配置productFlavors
安卓开发工具升级到最新版本3.4.1之后,需要配合升级kotlin到最新版本,如果你不确定你的kotlin是不是最新版本,那么你可以通过找到As导航栏的Tools–>Kotlin–>Configure Kotlin Plugin Update选项来 检查Kotlin 是否会更新到了最新版本。一般As的升级也会导致gradle的版本升级,最新的gradle版本则是5.1.1。升级这些...原创 2019-06-28 19:38:07 · 1480 阅读 · 0 评论 -
安卓使用Seekbar控制ScroolView的滑动距离,并让thumb显示在进度条的外层
在安卓开发中,我们很少用用到Seekbar这个控件,这个控件继承自PrograssBar.我们可以发现Seekbar和PrograssBar最大的区别就是进度条是否可以被拖动。但是这里有个问题就是拖动条我们发现正常的设置之后会显示在进度条的里面,我们也找不到相关的Seekbar的Api去让拖动条显示在进度条的外层。那么我们要怎么做来解决Seekbar的进度条显示在外层呢?下面是解决方法:&...原创 2019-06-28 19:34:37 · 1843 阅读 · 0 评论 -
解决安卓App启动页面会闪一下
在安卓中,我们的App都会独享一个Liunx虚拟机,我们启动一个app也类似与你的手机开启启动一样,App的运行环境需要有一个加载过程,这个加载过程页面,我们安卓开发人员就称它为App的启动页面。一般的安卓启动页面都会有一个启动动画,设置一个公司目前正在推广的广告网页,这个广告网页一般由后台接口提供链接和显示时长。这样,我们就可以通过后台控制来展示不同的活动启动页面。测试人员突然提了一个优化问...原创 2019-07-03 17:16:27 · 6760 阅读 · 0 评论 -
安卓开发SpannableStringBuilder展示富文本
在安卓开发中,如果你们的项目需要展示文本,然后文本里面嵌套着图片,并且展示的文字有些字需要标记成不同的颜色,文字还需要有点击事件。如果让你按之前的思路去实现这样的一个效果,你会这样来设计实现思路: 1)文字用TextView展示,图片用ImageView展示,然后文字需要被截取,根据后台返回的文字索引脚标。 2)截取的文字会和图片链接进行组合布局进行展示,这样的问题就会是文字和图片的布局是不...原创 2019-07-03 16:18:45 · 1119 阅读 · 0 评论 -
安卓开发实现一个仿今日头条,可以拖拽的GirdView
最近项目需要使用GirdView来实现添加阅读频道和删除阅读频道的功能,查找了网上很多饿的开源项目,却没有完全可以实现项目功能的,所以决定把项目的这个功能控件抽取成开源框架来方便大家使用。Github开源项目地址:DragGridView-master。首先需要记录一下第一次给Github项目上图,然后我们需要简单的分析一下,首先我们的布局不仅仅是单一的item,而是有两个标题栏,然后后面的就...原创 2019-07-11 19:28:45 · 1361 阅读 · 0 评论 -
安卓基于Mvvm架构模式重构实战
在经历了把项目的5个modules合并成一个Module为app-framwork Moudle外,项目目前的app module有非常多的和业务无关的代码。所以目前必须需要采用一种架构模式来对项目进行重构,来达到简化项目逻辑,实现代码之间的高内聚、低耦合,降低今后的代码维护成本。下面我们来一起学习一下这个架构模式吧。从github下载了目前最火的Mvvm架构MvvmHabit。之前的项目架构...原创 2019-05-20 19:13:02 · 1541 阅读 · 0 评论 -
Service的启动方式和设计理解
Service就是没有界面的Activity,这样理解Service或许有点让人难以信服。首先Service的生命周期和Activity是完全不一致的,然后是它的启动方式有两种,两种启动方式也各有区别。它在安卓framwork层的设计原理和实现的功能也和Activity完全不一致,所以请不要偷懒说Service就是没有界面的Activity,下面我们看看Service的生命周期。 实验原创 2017-03-14 15:55:14 · 332 阅读 · 0 评论