
Android开发
文章平均质量分 74
加油!!
&岁月不待人&
每一个优秀的人,都有一段沉默的时光,那段时光是付出了很多努力的,却得不到结果的日子,我们把它叫做扎根。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android 常用设计模式和实例
设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。原创 2025-02-10 18:50:48 · 1852 阅读 · 0 评论 -
Android 毛玻璃 高斯模糊 五种方法,赶紧用
需求:Android实现模糊真的很烦,每次UI画出来就觉得真的很烦。一般不会做,每次做就觉得有点烦,有时候是模糊图片,有时候是模糊有个背景。因为遇到模糊的需求的时候比较少,所以也没总结。这次遇到了,还让我走了好些绕路。这次进行个小小总结。总结了用到的五种实现方式。原创 2025-01-10 10:41:59 · 5855 阅读 · 0 评论 -
Android View事件分发
什么是View事件分发?将点击事件(MotionEvent)传递到某个具体的View或者ViewGroup处理的过程。事件分发是向下传递的,也就是父到子的顺序,当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件)。Touch事件相关细节(发生触摸的位置、时间、历史记录、手势动作等)被封装成MotionEvent对象。原创 2024-11-04 14:38:01 · 1530 阅读 · 0 评论 -
Retrofit网络请求二次封装
(之前用过Any,但是后端返回的数据格式有时候会不一样,有可能是Boolean,String,或者就是个列表,并不是一个json,所以后面我换成了JsonElement)App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。网络请求在App开发中是不可避免的开发功能点,Android自带的ottp用于网络请求,于是便衍生了各种便捷的网络请求三方库。retrofit的网络请求的工作本质上是。原创 2024-10-24 18:30:15 · 840 阅读 · 0 评论 -
Android 通过相机和系统相册获取图片,压缩,结果回调
在常规的App开发中,很多时候需要用户上传图片来进行一些业务上的实现,例如用户反馈,图片凭证等。我的Retrofit请求自己又封了一下,这儿就不粘贴。传文件和普通接口会有些不同,注意一下就好了。流程请看代码注释,其中的fileprovider,需要自己在manifest中声明。我使用的是EasyPermission框架,也可以自己写。你允许分享的文件路径。相关权限回调处理,可以去看我的另一篇博客。指的是一个 XML 文件,你需要在。标签,并定义了可共享的目录。目录下创建这个文件,告诉。原创 2024-09-14 09:52:48 · 538 阅读 · 0 评论 -
获取App应用列表,不需要权限
但是获取应用安装列表的权限现在属于敏感权限,即QUERY_ALL_PACKAGES权限。业务需要获取用户的已安装的应用列表进行上传。2.实现代码 AppUtils.kt。1.Manifest文件里进行配置。这样就是获取了安装列表的数据。原创 2024-09-11 14:36:45 · 1024 阅读 · 0 评论 -
Android 获取设备相关信息
在做某些项目时,需要上传必要的设备信息给服务器用于风控在此做一下总结。主要抓取设备id操作系统版本,设备型号,IMSI,路由器,mac地址,设备mac地址,安卓id,经度,纬度,ip地址....原创 2024-08-29 16:42:08 · 732 阅读 · 0 评论 -
AndroidX 库和旧的 Android 支持库 (android.support) 之间的冲突 in multiple modules and/or libraries.....
我们平时使用一些三方库,一般都是直接在build.gradle直接引用,然后自己调用人家的API就行了,但仔细想想,我们还可以使用AAR依赖和module依赖。这是我常用的一个方法,因为之前Glide有个版本的库比较老,但是里面有个图片处理的功能,我经常用到,就会使用下面的方法把support库给干掉。我们在做日常的项目开发时经常会需要对接三方SDK或者使用一些三方依赖库已完成项目的需求,但是有时候会在拉入依赖库后报错库文件冲突。如果不能完全迁移到 AndroidX 或者你的项目中有第三方库依赖旧的。原创 2024-08-29 10:12:20 · 1196 阅读 · 0 评论 -
Android 获取通话记录
在某些App的开发者,获取通话记录有时候是必要的(现在都要申请相对于权限哦,App上架得说明为啥获取此权限)。因为工作风控数据收集经常会用到,在此做个总结。原创 2024-08-28 19:02:27 · 1189 阅读 · 0 评论 -
Android JetPack Databinding使用及解析
DataBinding 是谷歌官方发布的一个框架,是 MVVM 模式在 Android 上的一种实现,减少了布局和逻辑的耦合,数据能够单向或双向绑定到 layout 文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常。优点:双向绑定,减少大量的findviewById代码,结合其他的jetpack组件使用开发效率大大提高。缺点:增加包体积,编译速度(影响很小)原创 2024-05-17 15:38:56 · 1216 阅读 · 0 评论 -
Android 网络动态监听和是否联网
App内部分3.使你的BaseActivity继承NetworkListenerHelper.NetworkConnectedListener并重写onNetworkConnected方法,这样当网络变化后,就会回调此方法,你就可以进行自己的逻辑处理了。App内部分功能需要动态监听网络,获取网络信息,IP等,此外部分界面的功能需要检测是否联网才可跳转,于是自己总结了下。原理:因为当手机的网络发生变化时,广播是可以监听到的,所以可以利用这一个特性进行监听,并发送到应用所需要的地方。第三步:新建网络监听工具类。原创 2023-10-18 16:46:11 · 1087 阅读 · 0 评论 -
Android StringFog 字符串自动加密
一款自动对dex/aar/jar文件中的字符串进行加密Android插件工具,正如名字所言,给字符串加上一层雾霭,使人难以窥视其真面目。可以用于增加反编译难度,防止字符串代码重复。支持java/kotlin。支持app打包生成的apk加密。支持aar和jar等库文件加密。支持加解密算法的自主扩展。支持配置可选代码加密。完全Gradle自动化集成。不支持InstantRun原创 2023-09-18 20:43:27 · 3722 阅读 · 8 评论 -
Android 混淆使用及其字典混淆(Proguard)
所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的(我目前看来是如此的)默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。可以看到,里面的各种对象,方法,变量名,参数等等都被混淆了,变化非常之大。原创 2023-09-18 20:42:04 · 2736 阅读 · 0 评论 -
Android Jsoup爬取网页数据及其局限性,接口爬取数据的思路
但是,我在爬取某些网页的时候,发现某些数据拿不到,拿不全,我发现有些网页,他的数据并不是一次获取的,按F12发现,他会并行请求很多数据再展示,所以,Jsoup是否可以真的获得动态网页的数据呢?1.首先是element查看当前网页的源代码,在旁边的黄色标记的箭头,你点击后,再去点左边网页的元素,你就知道,它的数据在哪里了。我看网上其实有很多的Jsoup博客,讲的挺好的,但是有些许差异,有的也将错了,我还是推荐去官网学习,内容很少,也很简便。emmmm,在爬取一个网站的音乐数据时,用Jsoup好久都没搞出来。原创 2023-05-15 16:55:18 · 1499 阅读 · 4 评论 -
Android 获取栈顶应用包名
方法来获取当前运行的任务列表,然后从中获取栈顶的任务(即栈顶应用)。以下是获取栈顶应用包名的示例代码:(代码是java,想用kotlin的自己用AS转一下就行了)需求:因为需要做到应用锁功能,所以需要对前台展示的App进行判断锁屏,所以当应用锁的后台服务挂起时,需要对栈顶的应用包名进行判断。,如果你某个App使用了,悬浮窗,未关闭的情况下,则会一直是那个App。来判断最近使用的App是哪个,是的,只能判断最新使用的App。另外判断当前正在展示的App是哪个,可以用。这样就可以获取栈顶的App了。原创 2023-05-11 21:10:26 · 1403 阅读 · 1 评论 -
判断App是否处于后台/前台,使用ActivityLifecycleCallbacks稳得很!
RunningAppProcessInfo.IMPORTANCE_FOREGROUND,或者RunningTask来判断过, 但是遇到过偶然失灵或者无法适配现在的android版本。原理其实就是利用activity的生命周期来判断,因为activity见不到了,都会调用onStop方法,所以它不但可以判断back监听,还可以判断Home退到后台。项目需要在App退到后台,再次进入App的时候,进入启屏页展示广告,记得之前用过。直接上代码:用的Kotlin,原理写在代码里的注释中了。原创 2023-03-08 10:00:10 · 1497 阅读 · 6 评论 -
Android 底部导航栏(四、ViewPager+RadioGroup+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+RadioGroup+Fragment这三个控件来实现此功能。前面写了有三种实现方式,有兴趣可以去看看,Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)_&岁月不待人&的博客-优快云博客_android 底部导航栏Android 底部导航栏(二、自定义View+Fragment)_&岁月不待人&的博客-优快云博客。原创 2022-11-07 18:11:35 · 3011 阅读 · 0 评论 -
Android 底部导航栏(三、ViewPager+TabLayout+Fragment)简单易懂
Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具),Viewpager使用起来就是我们通过创建adapter给它填充多个view,左右滑动时,切换不同的view。Google官方是建议我们使用Fragment来填充ViewPager的,这样 可以更加方便的生成每个Page,以及管理每个Page的生命周期。可以用来主页/模块切换,图片轮播,新手引导等等。ViewPager 全面总结_淡然一笑、的博客-优快云博客_viewpager。原创 2022-11-04 18:24:48 · 6275 阅读 · 1 评论 -
Android Navigation获取栈顶Fragment
需求是需要判断当前栈顶的Fragment的是不是指定Fragment,如果是就不通知此条消息,那么就需要获取当前正在展示的Fragment,即栈顶的Fragment,以往获取栈顶的Activity很简单,这个还把我考住了。原创 2022-07-14 16:08:34 · 3717 阅读 · 2 评论 -
Android:解析Json异常 Expected a string but was BEGIN_OBJECT at
今天解析后端数据时,发现了这个报错:Expected BEGIN_OBJECT but was STRING at看来是自己哪儿解析错误了。因为数据的特殊性,后端返回的Json串里面可能还会有Json数据,可能嵌套了三次层,例如:{"info":{"clientMsgId":"ebc5018f-b2bd-4c87-a662-5bcf11dd3843","content":"{\"inviteId\":159,\"meetingInfo\":{\"ownerAvatar\":\"https://cdn.dev原创 2022-07-02 18:43:06 · 2980 阅读 · 0 评论 -
Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)
现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能它是android原生的一个底部导航框架,一般和Fragment一起使用。xml布局:最外层的layout不用管,那是databinding框架的根布局,主要的布局FrameLayout来装载fragment列表,BottomNavigationView实现底部导航栏,最后监听绑定实现点击切换其中BottomNavigation原创 2022-06-29 17:38:47 · 15550 阅读 · 19 评论 -
关于RecycleView的getPosition(),getAdapterPosition()过时和getBindingAdapterPosition、getLayoutPosition..的总结
关于RecycleView的getPosition(),getAdapterPosition()过时和getBindingAdapterPosition.getLayoutPosition(),getAbsoluteAdapterPosition()方法的区别和使用总结原创 2022-06-27 17:18:06 · 7524 阅读 · 0 评论 -
Android TabLayout的使用与总结
TabLayout是Android中的一个控件,常和ViewPager搭配使用,运用于tab切换viewpager,Google在升级了AndroidX之后,将TabLayout迁移到material包的com.google.android.material.tabs.TabLayout原创 2022-06-22 11:40:56 · 3055 阅读 · 0 评论 -
Android 监听键盘输入(实现搜索、发送、完成等等)
在Android App的实际开发中,时常会需要监听软键盘的输入事件。可通过三种方法进行监听,即dispatchEvent,KeyListener,setOnEditorActionListener这三种方式例如:微信和QQ聊天的消息发送,你会发现他的聊天框并没有发送的控件,软键盘的换行或者某个按钮会变成发送;在某些浏览器的输入框,输入内容后,软件盘的某个按钮会有搜索的字样,还有填写内容时的完成按钮等等,这些都可以通过监听键盘和输入框的一些配置实现这些功能。原创 2022-05-31 20:52:14 · 11089 阅读 · 0 评论 -
Android 设置Padding和Margin(动态/静态)
一、什么是padding,什么是margin?在Android界面开发时,为了布局更加合理好看,很多时候会用上Padding和Margin,padding和margin是什么呢?即内边距和外边距;某个View指定为padding是针对该View里面的子View距离该View距离而言的,或者是里面的内容距离容器的距离。某个View指定为margin是针对该View本身距离别人或者父View而言的。例如下图,输入框里面的文字内容,如果不设置内边距,那么就会紧挨左上角,这样看起来,就很不友好,原创 2022-05-17 21:20:09 · 18775 阅读 · 1 评论 -
Android gradle.properties 基础使用和常规配置
1.什么是Gradle?Gradle 是一个开源构建自动化工具,其设计足够灵活,可以构建几乎任何类型的软件。2.什么是gradle.properties?在Android中,1.在使用Android Studio新建Android项目之后,在项目根目录下会默认生成一个gradle.properties文件,它是由IDE自动生成的gradle.properties文件。2.他是项目级别的Gradle配置文件,gradle.properties里面定义的属性是全局的,可以在各个模块的build.原创 2022-04-20 16:17:29 · 13034 阅读 · 0 评论 -
Android EditText输入框的使用(很详细很基础)
关于Android手机的各类输入框,在编辑多行文本,文本块,统一使用的是EditText,这也是我们使用的最多的常用控件之一,在此做一个简单的总结。一、基础属性首先,EditText作为一个控件,他是继承于View的,所以他具有View的很多属性及方法。当然,现在出了个AppCompatEditText,它是继承于EditText的,加了一些外观的处理,其余的用法那些一模一样。在写Xml界面时,我们可以通过Android:,tools:,自定义属性等等为其定义各种属性。这些属性可以确定他的..原创 2022-03-28 16:37:04 · 6313 阅读 · 0 评论 -
Android Html.fromHtml() 设置字体颜色
android常见对文本处理的方法,及Html.fromHtml(),SpannableString的详细使用和注意事项原创 2022-02-23 11:00:14 · 7224 阅读 · 0 评论 -
Android Dialog和PopWindow的使用
Android Dialog和popWindow 的具体实现方式原创 2022-02-14 18:38:26 · 8379 阅读 · 0 评论 -
Mac zsh:command not found: adb(已解决)
小弟是个android开发,开发工具自然用的是Android Studio,开发嘛,自然会用到很多插件,什么翻译的啊,调试的啊,而调试的话,adb这个插件就会非常实用。Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。官方文档 ADB的介绍习惯了可视化操作,所以一半调试的时候,都是用鼠标点点点,比如ADB再比如 Git操作.原创 2021-12-22 11:20:22 · 5377 阅读 · 2 评论 -
自定义View —View属性和基本方法
写在前面首先我们要明白,为什么要自定义View?主要是Android系统内置的View无法实现我们的需求,我们需要针对我们的业务需求定制我们想要的View。开发俩年,多多少少写了些自定义控件和自定义View,这次还是好好整理下,面的有些东西老是遗漏。不过自己在公司前辈面前算是菜鸟了,所以水平有限,记录一些比较基础的,仅作个人总结和分享。一、自定义View常用场景和分类需求永远是在变更的,花样多的不行,很多时候系统自带的控件和布局无法完成的时候就可以使用自定义View来实现,或者,在某些多处复原创 2021-11-30 17:18:39 · 1146 阅读 · 0 评论 -
Locale 及Locale.getDefault()
1.什么是Locale?Locale对象表示了一个特定的地理,政治或文化区域。需要使用到Locale执行其任务的操作称为区域设置敏感,并使用Locale为用户定制信息。例如显示一个数字就是一个区域设置敏感的操作–该数字应根据用户所在国家,地区或文化的习俗和惯例进行格式化。2.Locale.getDefault()使用 1.在日期格式里: val format = SimpleDateFormat("MM-dd HH: mm", Locale.getDefault()) ...原创 2021-09-17 18:07:26 · 8044 阅读 · 0 评论 -
Glide 图片圆角失效问题
1.应用场景在当下主流的App中,拿到图片资源时都会做一些处理,过度动画等等再展现给用户,很多时候见到的图片都是圆角的,给用户的视觉体验更好,在图片处理方面,经常会用到Glide框架,所以,圆角自然也可借此实现2.问题今天在项目中,在对几处图片控件进行处理时,发现其中一个控件的圆角失效了,对比之后发现应该是imageView的scaleType属性导致其圆角失效,在经过测试和网上的查询过后发现在对ImageView不做任何的ScaleType属性处理时,其圆角是正常展示的,但是在我们开发时,原创 2021-09-15 22:28:39 · 5341 阅读 · 2 评论 -
Android版本,gradle版本及其API等级表
1.Android版本及其对应API级别代号 版本 API 级别/NDK 版本 Android11 11 API 级别 30 Android10 10 API 级别 29 Pie 9 API 级别 28 Oreo 8.1.0 API 级别 27 Oreo 8.0.0 API 级别 26 Nougat 7.1 API 级别 25 Nougat 7.0 API 级别 24 M...原创 2021-04-13 13:54:29 · 3985 阅读 · 0 评论 -
Android转AndroidX
1.遇到的问题公司项目多,有些事java,有些是kotlin,有些是Android,有些是AndroidX,一些依赖和依赖库的更新使得调用的方法等不同,导致功能同步时效率及极其低下,于是打算把Android项目转成AndroidX。2.为啥转AndroidX?其实AndroidX并不是什么全新的东西,而是对Android Support Library的一次升级。因此,AndroidX上手起来也没有任何困难的地方,比如之前你经常使用的RecyclerView、ViewPager等等库,在A.原创 2021-04-09 17:21:13 · 1343 阅读 · 0 评论 -
Android 获取当前的类名,包名,路径等
在做项目时,无论为了功能还是调试,很多时候都需要获取到当前类的类名,包名,路径等等。在这里总结一下,以便总结和以后需要的时候更快的解决问题。1.在当前类获取当前的类名:strings.add(getClass().getName()); //base.activity.SplashActivitystrings.add(getClass().toString()); //class base.activity.SplashActivitystrings.add(getClass().ge原创 2021-03-05 18:22:38 · 6456 阅读 · 0 评论 -
Git下载地址、配置及工作流程(一)
一、下载地址1.Git 各平台安装包下载地址为:http://git-scm.com/downloads2.windows安装包下载地址:https://gitforwindows.org/ 官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/。3.在 Mac 平台上安装 Git 最容易的当属使用图形化的 Git 安装工具,下载地址为:http://sourceforge.net/projects/git-osx...原创 2021-02-03 11:31:57 · 2241 阅读 · 0 评论 -
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState(已解决)
最近在做提交任务功能,成功提交后点击弹窗返回原来的界面时,程序崩溃了,于是便看了下日志,报错java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 字面意思:在onSaveInstanceState之后无法执行此操作于是慢慢定位到错误的地方,最外层是表示在我的回调函数里dialog的展示有问题,看不出个啥,于是往最里层看,就到了这里看到这里,大概也知道啥原因了,...原创 2021-02-02 14:58:03 · 2652 阅读 · 1 评论 -
Multiple substitutions specified in non-positional format; did you mean to add BUG(7)
报错现象:strings文件报错了,编译失败原因:字符串中有%的原因相关提示:Multiple substitutions specified in non-positional format; did you mean to add the formatted=”false查看其余项目发现并无此问题,经过百度,发现以下解决办法:建议第一种,毕竟报错提示里是这样建议的 1.加上formatted="false"<string name="time_picker" f...原创 2021-01-08 14:00:32 · 265 阅读 · 0 评论 -
Android Studio 快捷键整理
一、Android Studio 快捷键整理常用快捷键Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get,set方法,构造函数等)Ctrl+E或者Alt+Shift+C 最近更改的代码Ctrl+R 替换文本Ctrl+F 查找文本Ctrl+Shift+Space 自动补全代码Ctrl+空格 代码提示Ctrl+...转载 2020-12-11 18:42:41 · 631 阅读 · 0 评论