Android
文章平均质量分 60
Android格调小窝
啦啦啦
展开
-
Android 漏洞修复
由于系统没有限制已注册JAVA类的方法调用,因此未注册的其它任何JAVA类也可以被反射机制调用,这样可能导致被篡改的URL中存在的恶意代码被执行,用户手机被安装木马程序,发送扣费短信,通信录或者短信被窃取,甚至手机被远程控制。在金融类或者通讯类app中可能会导致重要信息被窃取。webviewClient中有onReceivedError方法,当出现证书校验错误时,我们可以在该方法中使用handler.proceed()来忽略证书校验继续加载网页,或者使用默认的handler.cancel()来终端加载。..原创 2022-08-01 15:55:15 · 1512 阅读 · 1 评论 -
Bugly Android 符号表配置 流程和命令行
符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示[]对于nativecrash,为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。举一个例子。...原创 2022-07-15 12:55:17 · 1488 阅读 · 0 评论 -
Android将base64编码转化成图片
类似base64流的图片解析并展示:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcH Bw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4.原创 2021-05-12 18:45:08 · 1475 阅读 · 0 评论 -
RecyclerView嵌套RecyclerView,内层RecyclerView区域无法响应Item点击
问题描述项目中遇到了一个RecyclerView内嵌套RecyclerView,内层RecyclerView的区域无法响应所在Item的点击事件的问题(就是点击外层不能触发所在条目的点击事件)。解决方式(形式不同,原理相同)方式一viewHolder.rv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev.原创 2021-05-09 11:08:55 · 1751 阅读 · 1 评论 -
Android | 他山之石,可以攻玉!一篇文章看懂 v1/v2/v3 签名机制
目录1. 概述1.1 为什么要给应用签名?应用 APK 其实是一种特殊的 Zip 压缩包,无法避免恶意破解者解压 / 反编译修改内容,针对这个问题有何解决方案呢?他山之石,可以攻玉 ——数字签名算法。应用签名正是数字签名算法的应用场景之一,与其他应用场景类似,目的无非是:认证Android 平台上运行的每个应用都必须有开发者的签名。在安装应用时,软件包管理器会验证 APK 是否已经过适当签名,安装程序会拒绝没有获得签名就尝试安装的应用。验证完整性软件包管理器在安装应用前会验证应用原创 2021-02-22 11:44:13 · 840 阅读 · 0 评论 -
Android | 代码混淆到底做了什么?
前言代码混淆对于每个入门的 Android 工程师来说都不会太陌生,因为在编译正式版本时,这是一个必不可少的过程。而且使用代码混淆也相当简单,简单到只需要配置一句minifyEnabled true。但是你是否理解混淆的原理,如果问你代码混淆到底做了什么,你会怎么说?1. 混淆编译器如果以混淆编译器来划分的话,Android 代码混淆可以分为以下两个时期:ProGuard:一个通用的 Java 字节码优化工具,由比利时团队 GuardSquare 开发 R8:ProGuard 的继承者原创 2021-02-22 11:00:36 · 496 阅读 · 0 评论 -
时间选择器控件PickerView,实现“年-月-日”切换功能!
引言 通常我们都会在软件中遇到时间选择器功能,选择“年-月-日”,今天就来使用PickerView控件来实现这个功能。国际惯例,先上效果!效果预览用法第一步:添加依赖(app下build.gradle中)//PickerView库implementation 'com.contrarywind:Android-PickerView:4.1.9'第二步:布局文件<androidx.constraintlayout.widget.Constraint...原创 2021-01-06 10:05:35 · 439 阅读 · 0 评论 -
阴影效果控件ShadowLayout,可实现圆角、阴影、点击水波纹效果
引言 在Android开发中,我们要实现阴影效果,可能大多数人都会想到用CardView,但其实要实现控件的阴影效果我们还有更好的选择——控件ShadowLayout,人如其名,这款控件可以为你的控件:ImageView、TextView,Button等等添加你所想要的阴影效果,除此之外它还有更多其他的功能,赶快学习起来吧!效果预览用法第一步:添加依赖//阴影效果implementation 'com.github.lihangleo2:ShadowLayout:3.1..原创 2021-01-06 10:04:35 · 821 阅读 · 0 评论 -
Android 在线预览PDF文件
需求: 最近公司要求项目中增加加载PDF文件的功能,直接在github搜索, 找到了合适的第三方框架 :Android PdfViewer:项目地址: https://github.com/barteksc/AndroidPdfViewer功能很强大, 使用也比较广, 亲测可以使用.唯一的缺点 :添加到项目中 会使apk增加16M, 这是最不能接受的, 故弃用.PdfViewPager:项目地址: https://github.com/voghDev/PdfViewPager可加载asse原创 2020-12-25 15:15:01 · 740 阅读 · 1 评论 -
Android UI效果篇-(1)Ripple
内容简介记录5.0以后的Ripple(波纹效果)的使用.1.为什么要使用Ripple 2.如何使用Ripple效果 3.Ripple效果的颜色值改变 4.Ripple的波纹范围改变 5.Ripple添加一个item,其id为@android:id/mask1.为什么要使用Ripple提高用户体验,更好的视觉效果反馈给用户 间接增加了用户在应用停留的时间2.如何使用Ripple效果~在5.0的机型上,button会自带有Ripple点击效果。但是往往开发者需要修改点击效果,从而转载 2020-12-21 11:33:58 · 548 阅读 · 0 评论 -
Android最简单的沉浸式状态栏实现,亲测有效
沉浸式状态栏,不用我说,大家都知道。就是让你的应用跟状态栏融为一体,视觉上体验更加完美。Android的沉浸式状态栏实现本来是挺简单的一件事情,但是大家有没有一种感觉,太乱了!本来还有一点思路的,看完网上一大堆的文章以后,更加的懵逼,感觉就是真TM的复杂。今天我就做一个最简单的总结,看完之后大家就知道怎么做了,不用那么复杂。沉浸式状态栏主要分三种版本情况(4.4以下版本不做考虑,保持原状态栏):一、Android 4.4:4.4版本提供了一个透明状态栏(其实也不是全透明的,translu原创 2020-11-17 15:51:17 · 1335 阅读 · 1 评论 -
startActivityForResult使用场景
1. 概述在开发项目过程中,startActivityForResult是最常见的,它的使用场景就是:比如从AActivity跳转到BActivity,然后在BActivity中做一系列操作,然后在BActivity关闭时候需要把一些数据再回传给AActivity,或者当BActivity关闭后,需要让AActivity的界面或者数据发生一些变化,这个时候就需要用到 startActivityForResult。2. 代码如下1>:AActivity代码如下:// 意图实现ac.原创 2020-11-16 10:20:29 · 171 阅读 · 0 评论 -
不给你的APP加上自动换图标的功能吗?
前言也许你也注意到了,在临近双11之际,手机上电商类APP的应用图标已经悄无声息换成了双11专属图标,比如某宝和某东:8efea43731cdf2579eb4fb031c774737.jpg可能你会说,这有什么奇怪的,应用市场开启自动更新不就可以了么?真的是这样吗?为此,我特意查看了我手机上的某宝APP的当前版本,并对比了历史版本上的图标,发现并不对应。281048112ddef4486bc48c6abac63bb5.jpg41bdaa904abf3655fb8.原创 2020-11-16 10:18:10 · 288 阅读 · 0 评论 -
SharedPreferences调用导致的ANR分析
ANR文件提取的有用片段如下:----- pid 13431 at 2016-09-14 11:46:10 -----Cmd line: com.android.settingsat java.lang.Object.wait(Native Method)- waiting on <0x41897ec8> (a java.lang.VMThread) held by tid=1 (main)at java.lang.Thread.parkFor(Thread.java:120原创 2020-10-30 17:41:08 · 400 阅读 · 0 评论 -
SharedPreferences 优化
SharedPreferences 是一种简单便捷的存储方式,在 Android 应用中,常用来存储一些简单配置信息,例如保存应用中的一个开关状态和一些数据的独家属性等.特点用 Map 数据结构来存储数据,以键值(Key-Value)的方式存储,可以简单地读取与写入;数据读取与写入的方法都非常简单。存储路径SharedPreferences 将数据保存到一个 XML 文件中,该文件位于/data/data/PackageName/shares_prefs 下。创建模式Activi原创 2020-10-30 17:39:06 · 218 阅读 · 0 评论 -
谈谈 SharedPreferences 的优缺点?以及使用
Context.MODE_PRIVATE : 指定该 SharedPreferences 数据只能被本应用程序读、写;Context.MODE_WORLD_READABLE : 指定该 SharedPreferences 数据能被其他应用程序读,但不能写;Context.MODE_WORLD_WRITEABLE : 指定该 SharedPreferences 数据能被其他应用程序读;Context.MODE_APPEND :该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件;原创 2020-10-30 17:37:09 · 2839 阅读 · 0 评论 -
快速高效 | Android身份证识别
一:简介快捷支付涉及到方方面面,同时安全问题既是用户所关心的,也是制作者不容忽视的重要部分。比如涉及到支付和金钱的app,商户端app等等,都需要进行实名认证,实名认证可以通过银行卡认证和身份证认证。通常办法是通过上传照片,并且手动输入基本信息进行认证,这种方法不仅操作复杂,而且容易出错。网上很多资源,识别率低,速度慢,用户体验很差。今天我就和大家介绍一下我使用的方法,可以快速、高效的识别中国身份证信息。二:原理在拍摄框中右上区域加了一个人像区域提示框,并将该区域设为扫描人脸的区域,只有该原创 2020-09-14 16:55:53 · 1577 阅读 · 2 评论 -
Android:手把手教你构建 全面的WebView 缓存机制 & 资源加载方案
前言由于H5具备 开发周期短、灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案。目录示意图1. Android WebView 存在什么性能问题?Android WebView 里 H5 页面加载速度慢 耗费流..原创 2020-09-14 16:54:07 · 415 阅读 · 0 评论 -
android okgo post传数组
JSONObject json1 = new JSONObject(); json1.put("memo", fankuiEt.getText().toString()); json1.put("userid",(int)sp.getSharedPreference(Constant.USERID,0));// 1个数组参数 JSONArray jsonArray = new JSONArray(); for (String tag : tags) ...原创 2020-07-03 12:07:01 · 1276 阅读 · 0 评论 -
ADB命令行—查看日志
ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。注: 有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。[查看日志] [Android 日志] [按级别过滤日志] [按 tag 和级别过滤日志] [日志格式] [清空日志] [内核日志] 查看日志Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc原创 2020-07-01 10:10:25 · 1673 阅读 · 0 评论 -
studio提高编译速度的几种方法
第一种:减少依赖库的使用,让代码更加精简。对于一些必须依赖的库要尽量使用jar包或者依赖库,这样他每次就会在本地直接加载,而不是每次翻墙检查更新第二种:打开Android Studio,选择菜单项 File->Settings,把 Offline Work打上勾,使用离线gradle。第三种:修改内存配置,在C:\Users\Administrator\.gradle下创建gradle.properties文件org.gradle.daemon...原创 2020-06-12 15:17:11 · 815 阅读 · 0 评论 -
gradle 中implementation ,compile ,api的区别
首先在AndroidStudio3.x中compile已经过时由implementation和api来代替其次compile与api完全等同 3.x中可以完全将compile换成apimplementation与api的区别implementation编译的依赖只作用于当前的module。即app module依赖了other module,other module中使用implementation编译的三方库(如glide)只对other module起作用,app..原创 2020-06-12 15:14:13 · 788 阅读 · 1 评论 -
android的bigdecimal对0的格式化有bug
服务器返回的数据,android的bigdecimal对0的格式化有bug,需要判断一下returnif(data.compareTo(BigDecimal.ZERO)==0){BigDecimal.ZERO.toPlainString()}else{data.stripTrailingZeros().toP...原创 2020-04-20 15:14:35 · 414 阅读 · 0 评论 -
按Home键,再次打开app后,会重新进入manifest文件第一个页面问题
问题描述:前几天测试反馈回来一个这样的情况就是我在安装应用之后点击了打开 然后按home键 这个时候应用程序进入后台 我点击手机桌面的时候图片启动应用程序 程序重新再次启动而不是后台的程序返回到前台;解决方案:在启动界面的onCreate()方法里添加如下代码:if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGH...原创 2020-04-17 11:42:15 · 298 阅读 · 0 评论 -
解决在Android 8.0无法显示通知,Android 8.0通知系统适配
概述Android 8.0 系统,Google引入通知渠道,提高用户体验,方便用户管理通知信息,同时也提高了通知到达率。通知适配Android 8.0 功能和 API配置 build.gradle 中targetSdkVersion设置大于等于26。这时如果不对通知渠道适配,通知就无法显示。 代码 /** * 显示通知栏 * @param co...原创 2020-03-05 13:34:20 · 865 阅读 · 0 评论 -
Android 8.0 后台Service限制
Android O 后台启动Service崩溃问题在 Android 8.0 (API26)之前,创建前台服务的方式通常是先创建一个后台服务,然后将该服务推到前台。 Android 8.0 (API26)有一项复杂功能;系统不允许后台应用创建后台服务。 因此,Android 8.0 引入了一种全新的方法,即 Context.startForegroundService(),以在前台启动新服务...原创 2020-03-05 13:32:01 · 522 阅读 · 0 评论 -
Android SDK版本特性
6.0(sdk23)1.运行时权限 ,manifest声明的权限如储存、录音、拍照等要动态申请权限2.WLAN 和网络连接变更 、相机服务变更 增加低电耗模式和应用待机模式 取消支持 Apache HTTP 客户端 移除硬件标识符访问权 7.0(sdk24)私有文件访问权限更改(不能使用file:// Uri来访问,需要FileProvider)res目...原创 2020-03-05 13:12:21 · 694 阅读 · 0 评论 -
EventBus 3.0: 入门使用及其使用
EventBus 3.0: 入门使用及其使用 完全解析前言EventBus是greenrobot再Android平台发布的以订阅-发布模式为核心的开源库。EventBus翻译过来是事件总线意思。可以这样理解:一个个(event)发送到总线上,然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者,这也是观察者模式的一个最佳实践。我...原创 2020-01-15 15:37:15 · 259 阅读 · 0 评论 -
Android10填坑适配指南
1.Region.Op相关异常:java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed当 targetSdkVersion >= Build.VERSION_CODES.P 时调用 canvas.clipPath(path, Region.Op.XX...原创 2020-01-15 15:35:39 · 1105 阅读 · 2 评论 -
Fragment 生命周期和使用,以及和Activity之间的通信
Fragment 概要Fragment表示 Activity 中的行为或用户界面部分。您可以将多个片段(片段就是指 Fragment )组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(有点像...原创 2020-01-07 15:48:20 · 831 阅读 · 0 评论 -
Android中WebView加载网页设置进度条
我们平时在进行安卓开发使用到webview加载网页时,我们不能准确了解网页的加载进度,因此为了提高用户体验,我们在webview中加入进度条显示加载进度。一、主界面xml布局文件? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1...原创 2019-11-27 12:02:34 · 620 阅读 · 0 评论 -
shape 阴影实现方式,总有一款适合你
经常有遇到设计给按钮添加一些阴影,针对这一种情况有以下几种方式:1. 求美工妹妹切一张背景图。- -!2. 被拒之后- -!自己网上找一些资源,制作一张背景图,这里推荐一个制作9path的网站:9path神器3. 使用安卓自带的默认的背景在这里插入图片描述android:background="@drawable/abc_popup_background_mtrl_mul...原创 2019-10-13 12:00:50 · 1035 阅读 · 0 评论 -
RecyclerView和Glide错位闪烁,RecyclerView和glide搭配中的图片混乱
RecyclerView用的是我们自定义的内部类ViewHolder来复用的,也就是复用的是ViewHoler当屏幕下滑,item1滑出可视区域,将item1的ViewHolder对象给item8复用,那么此时item1中ViewHolder对象中持有的变量都是item1的。item1中的ViewHolder对象,在onBindViewHolder(MyViewHolder holder, i...原创 2019-07-07 20:45:57 · 1504 阅读 · 0 评论 -
生成二维码工具类,两个bitmap合成一个,生成带UI背景的二维码,保存二维码到相册
最近,接到一个保存带背景的二维码的需求,想了想,干脆两个bitmap合成一个,下面是完成该需求的过程一.生成二维码工具类public class QRCodeUtil { /** * 创建二维码位图 * * @param content 字符串内容(支持中文) * @param width 位图宽度(单位:px) * @par...原创 2019-07-03 14:29:05 · 994 阅读 · 0 评论 -
Android----复制到剪切板
//接口获取快递单号String trackingNumber = bean.getTrackingNumber();//获取剪贴板管理器:ClipboardManager cm = (ClipboardManager) getSystemService( Context.CLIPBOARD_SERVICE );// 创建普通字符型ClipDataif (!UtilString.is...原创 2019-07-03 16:42:14 · 580 阅读 · 0 评论 -
Android 单位 dp剖析
1、Android各设备屏幕密度Android 引入了dp这一单位,使得不论多大屏幕,多大dpi,显示的效果始终保持一致。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。安卓尺寸众多,按每个屏幕去适配肯定是不现实的。所以为了解决这个问题,安卓手机屏幕有自己初始的固定密度,安卓会根据这些屏幕不同的密度自己进行适配。这一点内容掌握到能满足自己设计工作需要就...原创 2019-07-12 21:16:35 · 483 阅读 · 0 评论 -
阿里云Sophix 3.0热修复技术接入总结
对比各种热修复技术和开发难度,我最终选择了Sophix接入之前先了解一下Sophix文档:阿里热修复:https://www.aliyun.com/product/hotfix快速接入直通车:https://help.aliyun.com/document_detail/53240.html?spm=a2c4g.11174283.3.1.D6UW0D稳键接入直通车:https:...原创 2019-07-05 22:42:54 · 596 阅读 · 0 评论 -
Android笔记:触摸事件的分析与总结----TouchEvent处理机制,事件分发处理机制
Android中的事件类型分为按键事件和屏幕触摸事件。TouchEvent是屏幕触摸事件的基础事件,要深入了解屏幕触摸事件的处理机制,就必须掌握TouchEvent在整个触摸事件中的转移和处理过程。此处将对TouchEvent处理机制的学习做个小小的总结和备记。当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,这个时候android系统如何处理Touch事件呢?到...原创 2019-07-06 13:21:19 · 560 阅读 · 0 评论 -
观察者模式、EventBus、广播BroadcastReciver的区别
欢迎来到格调小窝BroadcastReciver1.Android全局广播Broadcast2.Android本地广播BroadcastBroadcastReciver和EventBus区别观察者模式与 EventBus对比BroadcastReciverBroadcastReciver作为Android组件间的通信方式,可以使用的场景如下同一app内部的同一组件内的消息通信(单个或多个线...原创 2019-07-24 16:54:40 · 1936 阅读 · 0 评论 -
RecyclerView 配合 DiffUtil,RecyclerView局部刷新
一个问题:每次从服务器取到数据后,都是调用adapter.notifyDataSetChanged();进行刷新。那局部刷新(adapter.notifyItemChanged();)的这些东西不是白瞎了吗?对性能也不好,还没有动画。怎么办:用DiffUtil吧!号称可以进行局部刷新神器,让你的item 该刷新的地方就刷新,数据没有改变的地方不刷新(DiffUtil 内部调用了的局部刷...原创 2019-08-14 15:26:08 · 928 阅读 · 0 评论