Android开发
文章平均质量分 74
加油!!
&岁月不待人&
每一个优秀的人,都有一段沉默的时光,那段时光是付出了很多努力的,却得不到结果的日子,我们把它叫做扎根。
展开
-
Android 网络动态监听和是否联网
App内部分3.使你的BaseActivity继承NetworkListenerHelper.NetworkConnectedListener并重写onNetworkConnected方法,这样当网络变化后,就会回调此方法,你就可以进行自己的逻辑处理了。App内部分功能需要动态监听网络,获取网络信息,IP等,此外部分界面的功能需要检测是否联网才可跳转,于是自己总结了下。原理:因为当手机的网络发生变化时,广播是可以监听到的,所以可以利用这一个特性进行监听,并发送到应用所需要的地方。第三步:新建网络监听工具类。原创 2023-10-18 16:46:11 · 807 阅读 · 0 评论 -
Android StringFog 字符串自动加密
一款自动对dex/aar/jar文件中的字符串进行加密Android插件工具,正如名字所言,给字符串加上一层雾霭,使人难以窥视其真面目。可以用于增加反编译难度,防止字符串代码重复。支持java/kotlin。支持app打包生成的apk加密。支持aar和jar等库文件加密。支持加解密算法的自主扩展。支持配置可选代码加密。完全Gradle自动化集成。不支持InstantRun原创 2023-09-18 20:43:27 · 2002 阅读 · 8 评论 -
Android 混淆使用及其字典混淆(Proguard)
所以像网上贴的很多排除自定义View,或四大组件被混淆的规则在Android Studio中是无需加入的(我目前看来是如此的)默认情况下会对所有代码,包括第三方包都进行混淆,可是有些代码或者第三方包是不能混淆的,这就需要我们手动编写混淆规则来保持不能被混淆的部分。ProGuard能够通过压缩、优化、混淆、预检等操作,检测并删除未使用的类,字段,方法和属性,分析和优化字节码,使用简短无意义的名称来重命名类,字段和方法。可以看到,里面的各种对象,方法,变量名,参数等等都被混淆了,变化非常之大。原创 2023-09-18 20:42:04 · 1401 阅读 · 0 评论 -
Android Jsoup爬取网页数据及其局限性,接口爬取数据的思路
但是,我在爬取某些网页的时候,发现某些数据拿不到,拿不全,我发现有些网页,他的数据并不是一次获取的,按F12发现,他会并行请求很多数据再展示,所以,Jsoup是否可以真的获得动态网页的数据呢?1.首先是element查看当前网页的源代码,在旁边的黄色标记的箭头,你点击后,再去点左边网页的元素,你就知道,它的数据在哪里了。我看网上其实有很多的Jsoup博客,讲的挺好的,但是有些许差异,有的也将错了,我还是推荐去官网学习,内容很少,也很简便。emmmm,在爬取一个网站的音乐数据时,用Jsoup好久都没搞出来。原创 2023-05-15 16:55:18 · 1179 阅读 · 4 评论 -
Android 获取栈顶应用包名
方法来获取当前运行的任务列表,然后从中获取栈顶的任务(即栈顶应用)。以下是获取栈顶应用包名的示例代码:(代码是java,想用kotlin的自己用AS转一下就行了)需求:因为需要做到应用锁功能,所以需要对前台展示的App进行判断锁屏,所以当应用锁的后台服务挂起时,需要对栈顶的应用包名进行判断。,如果你某个App使用了,悬浮窗,未关闭的情况下,则会一直是那个App。来判断最近使用的App是哪个,是的,只能判断最新使用的App。另外判断当前正在展示的App是哪个,可以用。这样就可以获取栈顶的App了。原创 2023-05-11 21:10:26 · 917 阅读 · 1 评论 -
判断App是否处于后台/前台,使用ActivityLifecycleCallbacks稳得很!
RunningAppProcessInfo.IMPORTANCE_FOREGROUND,或者RunningTask来判断过, 但是遇到过偶然失灵或者无法适配现在的android版本。原理其实就是利用activity的生命周期来判断,因为activity见不到了,都会调用onStop方法,所以它不但可以判断back监听,还可以判断Home退到后台。项目需要在App退到后台,再次进入App的时候,进入启屏页展示广告,记得之前用过。直接上代码:用的Kotlin,原理写在代码里的注释中了。原创 2023-03-08 10:00:10 · 1243 阅读 · 6 评论 -
Android 底部导航栏(四、ViewPager+RadioGroup+Fragment)简单易懂
底部导航栏在Android应用中随处可见,今天使用ViewPager+RadioGroup+Fragment这三个控件来实现此功能。前面写了有三种实现方式,有兴趣可以去看看,Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)_&岁月不待人&的博客-CSDN博客_android 底部导航栏Android 底部导航栏(二、自定义View+Fragment)_&岁月不待人&的博客-CSDN博客。原创 2022-11-07 18:11:35 · 2665 阅读 · 0 评论 -
Android 底部导航栏(三、ViewPager+TabLayout+Fragment)简单易懂
Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具),Viewpager使用起来就是我们通过创建adapter给它填充多个view,左右滑动时,切换不同的view。Google官方是建议我们使用Fragment来填充ViewPager的,这样 可以更加方便的生成每个Page,以及管理每个Page的生命周期。可以用来主页/模块切换,图片轮播,新手引导等等。ViewPager 全面总结_淡然一笑、的博客-CSDN博客_viewpager。原创 2022-11-04 18:24:48 · 5580 阅读 · 1 评论 -
Android Navigation获取栈顶Fragment
需求是需要判断当前栈顶的Fragment的是不是指定Fragment,如果是就不通知此条消息,那么就需要获取当前正在展示的Fragment,即栈顶的Fragment,以往获取栈顶的Activity很简单,这个还把我考住了。原创 2022-07-14 16:08:34 · 3307 阅读 · 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 · 2323 阅读 · 0 评论 -
Android 底部导航栏(一、BottomNavigationView+Menu+Fragment)
现在常用的App主页都会有一个底部导航栏,根据需求也使用过好几种方法进行实现,于是想着还是总结一下,今天还写一个简单的BottomNavigationView方法来实现这个功能它是android原生的一个底部导航框架,一般和Fragment一起使用。xml布局:最外层的layout不用管,那是databinding框架的根布局,主要的布局FrameLayout来装载fragment列表,BottomNavigationView实现底部导航栏,最后监听绑定实现点击切换其中BottomNavigation原创 2022-06-29 17:38:47 · 12920 阅读 · 17 评论 -
关于RecycleView的getPosition(),getAdapterPosition()过时和getBindingAdapterPosition、getLayoutPosition..的总结
关于RecycleView的getPosition(),getAdapterPosition()过时和getBindingAdapterPosition.getLayoutPosition(),getAbsoluteAdapterPosition()方法的区别和使用总结原创 2022-06-27 17:18:06 · 5365 阅读 · 0 评论 -
Android TabLayout的使用与总结
TabLayout是Android中的一个控件,常和ViewPager搭配使用,运用于tab切换viewpager,Google在升级了AndroidX之后,将TabLayout迁移到material包的com.google.android.material.tabs.TabLayout原创 2022-06-22 11:40:56 · 2058 阅读 · 0 评论 -
Android 监听键盘输入(实现搜索、发送、完成等等)
在Android App的实际开发中,时常会需要监听软键盘的输入事件。可通过三种方法进行监听,即dispatchEvent,KeyListener,setOnEditorActionListener这三种方式例如:微信和QQ聊天的消息发送,你会发现他的聊天框并没有发送的控件,软键盘的换行或者某个按钮会变成发送;在某些浏览器的输入框,输入内容后,软件盘的某个按钮会有搜索的字样,还有填写内容时的完成按钮等等,这些都可以通过监听键盘和输入框的一些配置实现这些功能。原创 2022-05-31 20:52:14 · 8443 阅读 · 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 · 16072 阅读 · 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 · 12171 阅读 · 0 评论 -
Android EditText输入框的使用(很详细很基础)
关于Android手机的各类输入框,在编辑多行文本,文本块,统一使用的是EditText,这也是我们使用的最多的常用控件之一,在此做一个简单的总结。一、基础属性首先,EditText作为一个控件,他是继承于View的,所以他具有View的很多属性及方法。当然,现在出了个AppCompatEditText,它是继承于EditText的,加了一些外观的处理,其余的用法那些一模一样。在写Xml界面时,我们可以通过Android:,tools:,自定义属性等等为其定义各种属性。这些属性可以确定他的..原创 2022-03-28 16:37:04 · 5725 阅读 · 0 评论 -
Android Html.fromHtml() 设置字体颜色
android常见对文本处理的方法,及Html.fromHtml(),SpannableString的详细使用和注意事项原创 2022-02-23 11:00:14 · 6399 阅读 · 0 评论 -
Android Dialog和PopWindow的使用
Android Dialog和popWindow 的具体实现方式原创 2022-02-14 18:38:26 · 7990 阅读 · 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 · 5168 阅读 · 2 评论 -
自定义View —View属性和基本方法
写在前面首先我们要明白,为什么要自定义View?主要是Android系统内置的View无法实现我们的需求,我们需要针对我们的业务需求定制我们想要的View。开发俩年,多多少少写了些自定义控件和自定义View,这次还是好好整理下,面的有些东西老是遗漏。不过自己在公司前辈面前算是菜鸟了,所以水平有限,记录一些比较基础的,仅作个人总结和分享。一、自定义View常用场景和分类需求永远是在变更的,花样多的不行,很多时候系统自带的控件和布局无法完成的时候就可以使用自定义View来实现,或者,在某些多处复原创 2021-11-30 17:18:39 · 985 阅读 · 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 · 6387 阅读 · 0 评论 -
Glide 图片圆角失效问题
1.应用场景在当下主流的App中,拿到图片资源时都会做一些处理,过度动画等等再展现给用户,很多时候见到的图片都是圆角的,给用户的视觉体验更好,在图片处理方面,经常会用到Glide框架,所以,圆角自然也可借此实现2.问题今天在项目中,在对几处图片控件进行处理时,发现其中一个控件的圆角失效了,对比之后发现应该是imageView的scaleType属性导致其圆角失效,在经过测试和网上的查询过后发现在对ImageView不做任何的ScaleType属性处理时,其圆角是正常展示的,但是在我们开发时,原创 2021-09-15 22:28:39 · 4339 阅读 · 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 · 2658 阅读 · 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 · 1170 阅读 · 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 · 5626 阅读 · 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 · 1589 阅读 · 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 · 1762 阅读 · 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 · 177 阅读 · 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 · 505 阅读 · 0 评论 -
Timeout waiting to lock daemon addresses registry. Android Build失败(Bug5)
最近在编译项目时遇到以下报错Timeout waiting to lock daemon addresses registry. It is currently in use by another Gradle instance.Owner PID: 6992Our PID: 3472Owner Operation:Our operation:Lock file: C:\Users\XYSM\.gradle\daemon\5.6.4\registry.bin.lock翻译过来就是:等..原创 2020-11-23 14:05:30 · 410 阅读 · 0 评论 -
a.gray.PiggyGoldcoin.a病毒(已解决)
一、问题描述最近公司突然收到应用宝,OPPO和VIVO的应用下架通知,通知我们的俩款App疑似金融类诈骗软件,已下架。点进去查看是 平台例行扫描应用再次推送病毒结果,自动下架~当时全项目组都很蒙蔽,一个运动类App居然被查出是金融类诈骗病毒。后面不信邪有上传了一次,结果还是说是病毒软件,为了防止多次上传被拉黑名单,于是我们先打算自行测试一下。第一个,各大测试平台,VIVO用的是腾讯,安天和360扫描,于是被得到了以下结果测试了几次,发现都是腾讯手机管家测出来的,...原创 2020-11-19 20:01:05 · 73403 阅读 · 48 评论 -
Bug日志(四)——Android 防止多次点击(另解决多个列表子项点击)
在用户使用 应用的时候,经常会出现点击过快且多次点击同一控件的情况,一方面这是因为应用或手机当前有些卡顿,网络卡啥的另一方面也可能是由于很多应用并没有设置按钮点击时的 selector 或者其它按钮响应方式(例如点击按钮时按钮放大,常见于游戏),导致用户误认为没有点击到当前按钮。(比如使用selector再点击后更换背景颜色,图片等等)一.防止按钮多次点击1.工具类:一般按钮的防止多次点击我使用的是自己封装的工具类;public class AntiShakeUtils { .原创 2020-11-16 16:30:25 · 407 阅读 · 0 评论 -
Android shape的用法详解
一、什么是Shape属性在项目中经常会给控件定义背景,有时候有些界面可以叫UI做好,但如何显示的更加的贴近用户,则需要我们客户端去优化。如果在设置背景Android:background=“图片、颜色”,设置单一的属性并不能带来更好的体验。我们此时就可以使用shape属性作为控件的背景。shape怎么弄?1. 在res/drawable下新建一个xml文件;2. 在代码中引用这个xml文件,引用方式和图片一样。shape有哪些功能?corners ———-圆角 gradi原创 2020-11-05 13:51:25 · 5377 阅读 · 1 评论 -
ADB命令查看应用包名
一、查看当前包名1、在手机上打开app2、电脑端Crtl+R 输入cmd回车 输入命令:adb shell dumpsys window w |findstr \/ |findstr name=3、如下图,我在手机上打开了今日赚(一款赚零花钱的悬赏任务类App),查出来的包名应用名:其中 com.im.todayz为应用包名 ,fw.earntoday.ui.activity.MainActivity为当前运行的activity界面二、查看所有包名1. 依旧数据线连接手机,注...原创 2020-11-03 09:50:02 · 54125 阅读 · 4 评论 -
Bug日志(二)-Android网路请求图片地址图片不显示
做项目时,需要实现图片展示功能,不可能把一堆图片写到本地,那样不易维护而且包体会很大。只需要图片地址就行了,然鹅,在代码没问题的情况下,发现我随意找个百度图片的地址都能加载,自己家的图片不显示:发现俩个图片的地址区别是:http和https,估计是不安全链接被限制了,果然一查,开发者文档https://developer.android.google.cn/training/articles/security-config.html是的,只需要在在 AndroidManifest.xm.原创 2020-09-28 14:17:01 · 301 阅读 · 0 评论 -
Bug日志(三)-获取本地图片后上传失败
在开发过程中,要实现意见反馈的图片选择上传功能,进入相册选择后可以看到自己选择了什么图片,然而在获取到下列三个权限后,android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE android.permission.CAMERA选择图片后返回上传图片失败,查看Log,已经获取图片信息,但是上传失败:HTTP FAILED: java.io.FileNotFoundException:原创 2020-09-28 13:58:41 · 387 阅读 · 0 评论 -
Android基础--kotlin(一)
1.什么是Kotlin?kotlin是一种在 Java虚拟机上执行的静态型别编程语言,它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言。该语言有几个优势1. 简洁它大大减少你需要写的样板代码的数量。2. 安全避免空指针异常等整个类的错误。3. 通用构建服务器端程序、Android 应用程序或者在浏览器中运行的前端程序。4. 互操作性通过 100% Java 互操作性(100%兼容),可可以直接调用Java代码,可以无缝使用Java库。2.如何构建项目?因为原创 2020-11-03 09:55:50 · 208 阅读 · 3 评论 -
(二)Android Studio中的日志工具—Log
1.什么是Log?其实在Android API中,提供了一个日志工具类android.util.Log,通过这个类我们可以以不同的级别输出日志,Android的Log等级通常有五类,按照日志级别由低到高分别是Verbose、Debug、Info、Warning、Error 级别 输出方法 Verbose Log.v Debug Log.d Info原创 2020-09-04 19:13:10 · 1052 阅读 · 0 评论 -
Android 基础知识总结(一) build.gradle文件
接触Android开发还是有些日子了,工作了也没时间写博客。最近静下心来总结下一些基础知识。1.什么是build.gradle1.AS是通过Gradle来构建项目的,Google推荐使用的Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具。2.Gradle是用了一种基于Groovy的领域特定语言(DSL,Domain Specific Language)来声明项目设置,摒弃了XML(如ANT和Maven)的各种繁琐配置。3.项目中一般会出现2原创 2020-09-03 01:24:03 · 758 阅读 · 1 评论