
Android
文章平均质量分 52
fenglolo
这个作者很懒,什么都没留下…
展开
-
Android保存、读取图片——区分Android10以下版本和Android10以上版本
从Android 10(Q)开始,谷歌就开始修改了外部存储权限,叫做分区存储;分区存储可以分为两个目录,分别是沙盒目录(App-specific directory) 和公共目录。转载 2023-07-04 16:26:41 · 846 阅读 · 0 评论 -
构建项目报错:Task ‘xxx’ not found in root project ‘xxx’. Some candidate…
问题Task ‘xxx’ not found in root project ‘xxx’. Some candidate…解决方案方案1close项目,重新import,不是open,是import ;删除.idea、删除.gradle 然后关闭项目;从新从目录打开项目;方案2在根目录的build.gradle文件的首行加入:task assemble{}...原创 2021-08-24 10:05:47 · 14841 阅读 · 2 评论 -
Android 11 「外部存储」权限适配方案——权限申请框架推荐
文章目录1.权限种类1.1权限种类区分-普通权限、危险权限、特殊权限1.2存储权限-变化2.外部存储和内部存储对比2.1外部存储在手机哪个位置?2.2外部存储和内部存储的访问权限区别3.外部存储适配方案3.1 Android 10.0 以下外部存储权限适配3.2 Android 11 及以上申请外部存储权限4.权限申请框架推荐4.1 [XXPermissions](https://github.com/getActivity/XXPermissions)4.1 [AndPermission](https:/原创 2021-08-08 17:32:09 · 3207 阅读 · 0 评论 -
Android File文件「重命名」和「删除」操作
文章目录前言1. 重命名文件2. 删除文件前言最近做项目遇到一个需求:1.要求当app版本升级覆盖安装后,清除app部分功能的本地缓存。正好需要用到「重命名文件」和「删除文件」操作。1. 重命名文件renameTo 方法 /** * 重命名文件: * oldPath 和 newPath必须是新旧文件的绝对路径 */ public static boolean renameFile(String oldPath, String newPath) {原创 2021-07-09 16:30:16 · 2861 阅读 · 0 评论 -
Android中的MVP模式学习
文章目录1. MVP模式简介1.1 MVP所对应的意义2. MVP模式的应用2.1 model层描述和具体代码2.2 view层描述和具体代码2.3 presenter层描述和具体代码2.4 使用到的自定义的接口3. demo代码流程3.1 代码流程3.2 代码流程图例1. MVP模式简介1.1 MVP所对应的意义MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Pres原创 2021-06-18 14:55:41 · 147 阅读 · 1 评论 -
华为HMS Scankit 扫码SDK集成-实现扫一扫功能
华为HMS Scankit 扫码SDK集成-实现扫一扫功能文章目录华为HMS Scankit 扫码SDK集成-实现扫一扫功能一、集成HMS Core SDK二、配置混淆脚本三、指定权限四、调用扫码功能五、官方文档demo一、集成HMS Core SDK1.添加当前应用的AppGallery Connect配置文件在华为开发者联盟注册成为开发者-创建应用-下载agconnect-services.json文件2.将“agconnect-services.json”文件拷贝到应用级根目录下3原创 2021-06-04 17:51:33 · 6578 阅读 · 6 评论 -
TortoiseSVN 打Tags
TortoiseSVN打TagsTortoiseSvn打Tag的坑:必须把svn上的代码拉到本地,然后在本地代码上“右键”选择brandh/tag。步骤:把svn上需要打Tag的代码拉到本地;进入代码目录,在想要打tag的文件夹上右键依次选择“TortoiseSVN” ----> “Branch/tag…”,如下所示:修改Tag目录:把Tag保存到自己需要的目录下。注意:「该目录」必须在svn中存在,否则会报错。比如:保存目录为 …/code/trunk原创 2021-06-03 16:38:03 · 1242 阅读 · 0 评论 -
Android Studio 引入aar文件
方法一:在app目录下导入aar在app-libs目录下导入aar在app-build.gradle中配置repositories { flatDir { dir 'libs' } }implementation(name:'Test_debug', ext:'aar')构建项目,在External Libraries目录下会生成该依赖方法二、在项目根目录下导入aar(该方法更加实用,如果某一个library想依赖原创 2021-05-25 16:16:34 · 30815 阅读 · 1 评论 -
Android String字符串截取方法总结
Android String字符串截取方法总结指定字符,截取字符串,返回字符串数组:String str = "abcd.efg.123456.hijk.345";String[] strs=str.split(".");指定索引号,截取字符串:将字符串从索引号为3开始截取,一直到字符串末尾(索引值从0开始):String str = "abcdefghijklmnopqrstuvwxyz";str.substring(3);从索引号1开始到索引好7结束(并且不包原创 2021-05-25 10:39:20 · 10653 阅读 · 0 评论 -
Android OkHttp请求报错:java.net.UnknownServiceException:..not permitted by network security policy
问题在Android 9.0手机使用OkHttp请求一个http地址,会报如下错误。java.net.UnknownServiceException: CLEARTEXT communication to **** not permitted by network security policy原因是Android 9.0以后,Google官方解释:为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着An原创 2021-04-29 17:10:08 · 921 阅读 · 0 评论 -
LitePal的使用——Android开源数据库
本文知识点LitePal的集成LitePal实现数据库的增删改查LitePal常用的API1. LitePal的集成引入相应的类库创建litepal.xml更换继承的Application1.1 引入相应的类库 //litepal数据库 implementation 'org.litepal.guolindev:core:3.2.3'1.2 创建litepal.xmllitepal.xml是在assets文件夹下,项目main路径下New->Fold原创 2021-04-28 14:30:14 · 507 阅读 · 0 评论 -
Android Studio 使用Lambda表达式「详细配置」
前言:Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。配置:1、安装java 8,并在android studio中配置使用;2、app build.gradle中配置compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targe原创 2021-04-27 15:57:31 · 1363 阅读 · 0 评论 -
Android EditText优先弹出数字输入法
Android中EditText优先弹出数字输入法当一个EditText使用数字的频率很高,比如用来输入手机号等等,但是有时候可能也需要使用到输入英文和汉字的需求。这个时候,我们默认当EditText弹出时,优化弹出数字键盘比较好。解决方案//默认直接显示数字键盘editText.setInputType(InputType.TYPE_CLASS_TEXT);editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);setInputType和s原创 2021-04-26 13:51:15 · 1802 阅读 · 0 评论 -
Android 11 调用手机系统摄像头新策略 IMAGE_CAPTURE
前言android 11 调用系统摄像头有了新的策略,需兼容才可行1、在Android11之前调用系统摄像头代码:Intent captureIntent = new Intent("android.media.action.IMAGE_CAPTURE"); if (captureIntent.resolveActivity(this.getPackageManager()) != null) {}2、在Android11之后,captureIntent.resolveAct原创 2021-03-30 17:05:04 · 5075 阅读 · 0 评论 -
Android 防止按钮(View)多次重复点击之「防重复点击」——2.0(控制view的click事件)
前言为了防止“按钮”的点击事件在短时间内多次点击从而触发了多次处理操作;比如:快速点击“登录按钮”发送了多次登录接口,导致程序在短时间内进行多次数据提交or数据处理,这样的体验就不太好了。方法public class ClickHelper { private static final android.os.Handler mHandler = new android.os.Handler(android.os.Looper.getMainLooper()); public原创 2021-03-10 11:28:46 · 1108 阅读 · 0 评论 -
Android-沉浸式状态栏的实现
1、取得状态栏的高度值通过反射获取状态栏高度(部分手机可能获取不到) /** * 获取状态栏的高度 * @return */ protected int getStatusBarHeight(){ try { //通过反射获取到类 Class<?> aClass = Class.forName("com.android.internal.R$dimen"); /原创 2021-01-21 10:43:24 · 155 阅读 · 1 评论 -
Android 调试桥 (adb)
Android 调试桥 (adb)1- 基本用法1.1- 命令语法adb 命令的基本语法如下:adb [-d|-e|-s <serialNumber>] <command>如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb 。如果有多个设备/模拟器连接,则需要为命令指定目标设备。参数含义-d指定当前唯一通过 USB 连接的 Android 设备为命令目标-e指定当前唯一运行的模拟器为命令目标转载 2020-11-30 14:54:35 · 699 阅读 · 0 评论 -
Mac下jenkins安装步骤
前言本文写的是在自己本机上部署jenkins,如果是要部署到服务器,则需要另外配置一些东西。jenkins下载、安装、配置、新建项目1、从官网https://jenkins.io/ 上下载最新的pkg安装包,进行安装。然后一直点击next…就行2、安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080这个时候可能会报一个错误。如果出现了这面的问题。这个时候如果你重启电脑会发现Jenkins给你新增了一个用户,名字就叫Je转载 2020-11-18 10:44:35 · 2753 阅读 · 1 评论 -
Android四大组件:BroadcastReceiver
1. 定义BroadcastReceiver即 广播,是一个全局的监听器,属于Android四大组件之一广播分为两个角色:广播发送者、广播接收者2. 作用监听 / 接收 应用 App 发出的广播消息,并 做出响应3. 应用场景Android不同组件间的通信(含 :应用内 / 不同应用之间)多线程通信与 Android 系统在特定情况下的通信(如:电话呼入时、网络可用时)4. 实现原理5. 使用流程5.1 自定义广播接收者BroadcastReceiver继承Br转载 2020-10-20 20:13:13 · 181 阅读 · 0 评论 -
android自定义permission android:protectionLevel介绍
Android protectionLevel分4个级别:normaldangeroussignaturesignatureOrSystem如果定义的是normal或者dangerous:我们自己的应用需要去访问其对应受保护的资源时只需要在androidManifest.xml中添加相同的权限uses-permission如果是signature:不仅需要添加相同的权限, 必须同时具有相同的签名。如果是signatureOrSystem(这种权限的应用第三方的应用无法单独访问):原创 2020-10-19 16:45:24 · 1817 阅读 · 0 评论 -
Android 监听应用「进入后台」「回到前台」的几种方式整理
需求最近接到一个新的需求:用户把app切换到后台,再次切回到app界面的时候会被要求重新输入登陆密码,这一需求的设计主要是出于安全性考虑。这里就需要监听app的状态,从而判断app当前处于前台还是后台,再对其做不同的逻辑处理即可。方案一:利用ActivityLifecycleCallbacks监听所有activity的生命周期解释下registerActivityLifecycleCallbacks这个方法,只要app中有一个activity的生命周期改变了就会调用registerActi原创 2020-10-12 15:11:27 · 10407 阅读 · 1 评论 -
Android 内存泄漏「检测工具」之——LeakCanary2.0
前言在Android的性能优化中,内存优化是必不可少的点,而内存优化最重要的一点就是解决内存泄漏的问题,在Android的内存泄漏分析工具也不少,比如PC端的有:AndroidStudio自带的Android Profiler、MAT等工具;手机端也有,就是我们今天要介绍的LeakCanaryLeakCanary2.0原理详见LeakCanary官网文档LeakCanary2.0使用1. 集成LeakCanary2.0只需要在build.gradle中添加依赖即可dependencies{原创 2020-10-07 14:38:49 · 728 阅读 · 0 评论 -
Android monkey测试adb命令
Android monkey测试通用monkey测试命令:adb shell monkey-p com.hoomsun.hxb(包名)–throttle 100–ignore-crashes(忽略崩溃可设置)–ignore-timeouts (忽略超时可设置)–ignore-security-exceptions(索引越界)–ignore-native-crashes–monitor-native-crashes -v -v -v 10000>monkeysss.txt一、理解原创 2020-10-01 12:20:03 · 18093 阅读 · 0 评论 -
触发EditText焦点和自动弹出软键盘
前言最近做项目时遇到要求点击非EditText时,使该EditText获取焦点并自动弹出软键盘的需求。由于一般情况下我们点击EditText时会自动弹出系统键盘,而对与点击其他button触发EditText的弹出键盘没做过,于是记录下。实用场景1、点击button时,触发EditText的获取焦点和自动弹出软键盘2、点击某个话题的选项卡,会弹出一个popupwindow,或开启新的ACTIVITY。里面有诸如 评论、回复的选项,你点击这个选项的时候,需要定位到EditText编辑框,并且自动原创 2020-10-01 10:02:24 · 2880 阅读 · 0 评论 -
Android 获取屏幕、状态栏、标题栏的高度详解
前言如下图:绿色区域:屏幕区域蓝色区域:状态栏区域红色区域:标题栏区域黄色区域:view绘制区域1.Android手机屏幕的高度(绿色区域)方法一DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);Log.e("TAG", "屏幕高:" + dm.heightPixels);方法二DisplayMetrics displayMetrics转载 2020-09-28 20:58:52 · 1679 阅读 · 0 评论 -
Android 硬件加速 4种方式
前言:硬件加速可以在一下四个级别开启或关闭:(1)Application(2)Activity(3)Window(4)View1、Application级别在应用程序AndroidManifest.xml文件为application标签添加如下的属性即可为整个应用程序开启硬件加速:<application android:hardwareAccelerated="true" ...>2、Activity级别可以控制每个activity是否开启硬件加速,只需在activi原创 2020-09-28 19:29:21 · 7971 阅读 · 0 评论 -
Android 全面屏显示\沉浸式状态栏
前言:之前做项目为了达到全面屏显示,设置了一个theme主题样式,如下: <!-- 应用全屏样式 --> <style name="AppFullWindowTheme" parent="AppTheme"> <item name="android:windowFullscreen">true</item> </style>但是在部分手机上会出现一个坑爹的现象:虽然状态栏隐藏了,但是原状态栏位置上会被黑条占原创 2020-09-24 10:55:01 · 2744 阅读 · 2 评论 -
Android 防止按钮多次重复点击之「防重复点击」
前言为了防止“按钮”的点击事件在短时间内多次点击从而触发了多次处理操作;比如:快速点击“登录按钮”发送了多次登录接口,导致程序在短时间内进行多次数据提交or数据处理,这样的体验就不太好了。方法判断用户点击按钮间隔时间,如果间隔时间太短,则认为是无效操作,否则进行相关业务处理/** * 判断两次点击事件的间隔 */public class ClickHelper { private static long lastClickTime = 0; /** * 判断事原创 2020-09-16 19:35:31 · 2173 阅读 · 0 评论 -
Android 「dp和px」「sp和px」之间相互转换
前言android中在xml布局中我们可以使用dp和px都可以;但是在代码中,很多方法只提供了设置px的方法,这时候就需要用到dp和px相互切换了。方法/** * dp和px之间进行转换 */public class DensityHelper { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) {原创 2020-09-16 15:17:47 · 1288 阅读 · 0 评论 -
Android 限制EditText输入的文本行数为1
前言:android Edittext默认是可以换行的,但当我们用来作为输入账号、密码的时候,是希望它作为一行来展示,并不想让它可以换行。方法1: 「不建议」xml设置maxlines属性:android:maxlines="1"此属性设置为1,发现仅仅是显示1行,但按下回车仍然生效,可以换行输入。方法2:「不建议」xml设置singleLine属性:android:singleLine="true"可以保证EditText为单行,但此方法在Android 7.0的环境下过期了原创 2020-09-16 15:06:41 · 2346 阅读 · 1 评论 -
Android Dialog 去掉透明遮罩层「全透明」
dialog即使设置透明背景也会有一个蒙层(遮罩层),有时候因为UI设计并不想要这个蒙层。一行代码搞定dialog.getWindow().setDimAmount(0f);原创 2020-09-05 16:39:37 · 3101 阅读 · 0 评论 -
Android 使用简单帧动画实现一个自定义动态等待层
前言项目中有时候需要自定义等待层,使用帧动画实现一个动态的等待层还是不错的。一、简单帧动画实现1.在drawable下创建loading_view.xml<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <原创 2020-09-05 16:16:12 · 255 阅读 · 0 评论 -
Android 自定义dialog学习之——自定义一个提示框
前言最近项目中觉的Android系统的dialog样式太丑,确实也不太好看,就打算自定义一个dialog来使用。自定义dialog实例demo1、布局dialog_alert<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/dp_550"原创 2020-09-05 15:52:38 · 914 阅读 · 3 评论 -
Mac中Android Studio使用内存调整方法
Mac下调整Android Studio可使用内存大小前言当使用 MAC 安装完 AS 后,系统会给AS的内存值分配一个默认值,这个默认值是一个通用的,不可能去适配到每台机器。默认的值在/Applications/Android Studio.app/Contents/bin/studio.vmoptions这个文件里面-Xms256m-Xmx1280m-XX:ReservedCodeCacheSize=240m-XX:+UseConcMarkSweepGC-XX:SoftRefLRUP原创 2020-09-04 16:49:39 · 2506 阅读 · 0 评论 -
Android ViewFlipper控件使用之——图片切换的实现「带手势检测」
使用ViewFlipper控件实现图片切换参考:ViewFlipper使用详解前言ViewFlipper是一个切换控件1、一般用于图片的切换2、也可以用来添加View,不限定只用于ImageView,也可以是自定义View;只是我们经常利用ViewFlipper来实现ImageView的切换,如果切换自定义的View,使用ViewPager做更方便吧。一、使用ViewFlipper实现「图片切换」demo案例ViewFlipper布局:<ViewFlipper an原创 2020-09-04 11:23:07 · 371 阅读 · 0 评论 -
Android ViewFlipper控件使用之——滑动轮播公告的实现
使用ViewFlipper控件实现轮播公告前言ViewFlipper是一个切换控件1、一般用于图片的切换2、也可以用来添加View,不限定只用于ImageView,也可以是自定义View;只是我们经常利用ViewFlipper来实现ImageView的切换,如果切换自定义的View,使用ViewPager做更方便吧。一、使用ViewFlipper实现轮播公告demo案例1、布局文件配置:ViewFlipper布局:<ViewFlipper android:id="@原创 2020-09-04 08:28:37 · 705 阅读 · 0 评论 -
Android 获取手机设备信息:名称、型号、系统版本号、厂商、设备制造商、SDK版本、系统语言等等
常用的设备信息获取方法: /** * 设备名称 * * @return 设备名称 */ public static String getDeviceName() { return android.os.Build.DEVICE; } /** * 设备型号 * * @return 设备型号 */ public static String getModelName() {原创 2020-08-27 15:02:20 · 8183 阅读 · 0 评论 -
Android 获取应用「唯一标识符」——DeviceID「兼容android 10(Q)」
一、Android Q 之前1、所需权限需动态申请权限<uses-permission android:name="android.permission.READ_PHONE_STATE" />2、获取方法获取设备Id,IMEI等TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);telManager.getDeviceId();原创 2020-08-26 14:33:18 · 2473 阅读 · 0 评论 -
android Glide集成及使用注意事项——Glide 4.x
Glide 4.x集成及使用注意事项前言原文请到lmz14大神参考使用更多用法请到官方指南参考使用一、集成1、project gradle repositories { mavenLocal() }2、app gradlecompile 'com.android.support:support-v4:25.3.1'compile 'com.github.bumptech.glide:glide:4.0.0'annotationProcessor 'com.github转载 2020-08-25 14:32:16 · 1576 阅读 · 0 评论 -
android Glide集成及使用注意事项——Glide 3.x
Glide 3.x集成及使用注意事项一、集成1、project gradlerepositories { mavenCentral() }2、app gradle //glide implementation 'com.github.bumptech.glide:glide:3.8.0'3、混淆#glide-keep public class * implements com.bumptech.glide.module.GlideModule-keep原创 2020-08-25 11:37:40 · 963 阅读 · 0 评论