自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 adb授权读写权限无效

adb授权读写权限

2022-04-24 16:55:38 4346

原创 python上传zip文件

具体实现代码如下:def upload_zip_file(file_absolute_path): file_name = os.path.split(file_absolute_path)[-1] upload_bug_file = (file_name, open(file, 'rb'), 'application/zip') m = MultipartEncoder( fields={'file_name': file_name, 'file_path': upl

2021-11-09 13:05:11 2517

原创 OnTrimMemory

onTrimMemory介绍OnTrimMemory 回调是 Android 4.0 之后提供的一个API,主要作用是提示开发者在系统内存不足的时候,通过处理部分资源来释放内存,从而避免被 Android 系统杀死。OnTrimMemory回调Android系统会根据不同等级的内存使用情况,调用OnTrimMemory函数,并传入对应的等级:(1)app运行时回调参数TRIM_MEMORY_UI_HIDDEN表示应用程序的所有UI界面被隐藏了,即用户点击了Home键或者Back键导致应用的UI界

2021-02-24 15:50:38 2873

原创 Android进程保活

Android进程保活主要包括以下两个方面:(1)Android进程优先级提高(2)Android进程被杀之后拉起复活Low Memory KillerAndroid系统会依据系统资源和进程优先级(oom_adj)对进程进行回收,这即是Low Memory Killer规则。进程的优先级进程的优先级(oom_adj),划分5级:前台进程(Foreground process)可见进程(Visible process)服务进程(Service process)后台进程(Backgroun

2021-02-24 14:56:29 689

原创 元素定位uiautomatorviewer

uiautomatorviewer是由Android-sdk提供的一个元素定位器,本文将简单介绍此元素定位器的使用。uiautomatorviewer的作用获取需要测试app组件的resid,结合Android提供的accessibilityservice,可以实现对目标app的自动化测试。自动化测试思路:(1)adb命令发起广播传播一些参数,比如微信登陆所需的账号密码adb shell am broadcast–ez chp true --ez cht true–es wechatId {账

2021-02-08 14:57:12 492

原创 布局优化

目录includemergeviewStub注意viewStub的使用示例include将指定布局文件加载到当前布局文件注意:必须要复写android:layoutwidth和android:layoutheight属性才能使用其它属性,比如:android:layoutgrivity、android:layoutalign…、android:id等建议将给include标签调用布局设置宽高、位置、ID等工作放在调用布局的根标签中,这样可以避免给include标签设置属性不当造成的各种问题,给in

2021-01-22 11:24:25 169 1

原创 android点击home键再点击app图标返回原先的activity

问题在进入app一般进入登陆界面,登录界面设置的启动模式为singleTask,即是每次启动登录界面时,如果在栈中没有实例,则直接在栈顶创建一个新的实例;如果栈中已经存在实例,则将其上其他activity清除,将其至到栈顶位置复用。这种启动模式下导致问题:通过登录界面进入A界面,在A界面按home,重新点开app发现返回是登录界面而非A界面。原因进入应用:h-a1-a2回退home界面:h-a1-a2-h重新点击应用:h-a1h是home界面,a1是应用登录界面,a2是应用任意一个子界面解决

2021-01-15 11:34:49 1385 1

转载 RecyclerView下拉刷新与上拉加载

SwipeRefrshLayoutGoogle官方更新的一个Widget,可以实现下拉刷新的效果。setOnRefreshListener(OnRefreshListener):添加下拉刷新监听器setRefreshing(boolean):显示或者隐藏刷新进度条isRefreshing():检查是否处于刷新状态setColorSchemeResources():设置进度条的颜色主题,最多设置四种,以前的setColorScheme()方法已经弃用了。RecyclerView+SwpieRefr

2021-01-13 15:53:13 1860

原创 Android View System

事件分发事件分发的对象是谁?点击事件(Touch事件)当用户触摸屏幕时(View 或 ViewGroup派生的控件),将产生点击事件(Touch事件)Touch事件的相关细节(发生触摸的位置、时间等)被封装成MotionEvent对象事件类型具体动作MotionEvent.ACTION_DOWN按下View(所有事件的开始)MotionEvent.ACTION_UP抬起View(与DOWN对应)MotionEvent.ACTION_MOVE滑动ViewM

2020-12-30 19:58:29 1136

原创 设计框架 MVC MVP MVVM

MVC MVP MVVMMVCMVC是什么?视图层(View)对应于xml布局文件和java代码动态view部分控制层(Controller)MVC中Android的控制层是由Activity来承担的,负责视图的显示,控制逻辑。模型层(Model)针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。MVC特点具有一定的分层,model彻底解耦,controller和view并没有解耦;层与层之间的交互尽量使用回调或者去使用消息机制去完成。易于理解,

2020-12-23 20:45:22 164

原创 Android-三方源码

Retrofit源码分析Builder模式创建实例retrofit = new Retrofit.Builder() .baseUrl(GankConfig.HOST) .addConverterFactory(GsonConverterFactory.create(date_gson))//添加一个转换器,将 gson 数据转换为 bean 类 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加一个适配器

2020-12-23 20:43:08 217

原创 算法

目录两个子线程交替打印递增整数未排序的整数中找最大值和最小值?单次遍历计数排序快速排序LRU两个子线程交替打印递增整数public static void main(String[] args) { Task task=new Task(); Thread t1=new Thread(task,"thread_1"); Thread t2=new Thread(task,"thread_2"); t1.start(); t2

2020-12-23 20:40:38 101

原创 网络基础

输入一个URL到浏览器发生了什么浏览器查找域名的ip地址浏览器缓存 —— 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。系统缓存 —— 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。路由器缓存 —— 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。ISP DNS 缓存 – 接下来要che

2020-12-23 20:39:44 263

原创 Java基础

ArrayList主要底层实现是数组Object[] elementData,查询效率高,增删效率低,线程不安全。构造法无参构造法:通过无参构造方法的方式ArrayList()初始化,则赋值底层数Object[] elementData为一个默认空数组Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}所以数组容量为0;有参构造法:只有真正对数据进行添加add时,才分配默认DEFAULT_CAPACITY = 10的初始容量。扩容通过数组扩容的方式去实

2020-12-23 20:37:51 534

原创 Camera+MediaCodec+ffmpeg实现视频录制

架构设计原设计架构:调用系统Action属性打开手机相机,进行视频录制操作;使用ProjectApplication.activity.startActivityForResult()回调方式获取录制视频文件;利用callback机制回传获取录制视频文件到界面,进行数据上传和UI更新操作。原设计架构存在问题:上传视频后存在颜色失真的问题,这个现象的原因是Camera录制的YUV像素数据,没有进行视频格式压缩和封装,直接转为mp4格式文件存储,视频格式并未改变为mp4,则上传平台后存在颜色失真的现象

2020-12-17 14:53:54 1771 1

原创 Android基础

Java基础String, StringBuffer and StringBuilder可变性String 不可变StringBuffer 和 StringBuilder 可变线程安全String 不可变,因此是线程安全的StringBuilder 不是线程安全的StringBuffer 是线程安全的,内部使用 synchronized 进行同步线程池实现 Runnable 接口和 Callable 接口的区别Runnable 接口或 Callable 接口实现类都可以

2020-12-04 17:22:13 965

原创 MPAndroidChart绘制柱形图、饼状图

目录导入依赖柱形图BarChart柱形图布局文件BarChart的使用初始化BarChart获取数据多柱形图的展示饼状图饼状图布局文件初始化PieChart获取数据展示饼状图导入依赖在Android项目的gradle文件中导入依赖,代码如下repositories { maven { url 'https://jitpack.io' }}dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

2020-11-17 11:38:28 380

原创 树型视图构建

UI视图效果如下以下是展示树型视图的xml文件和dialog界面public class DataCollectCreateAreaDialog extends DataCollectBaseDialog { private RelativeLayout rlArea; @BindView(R.id.btn_data_collect_area_confirm) Button btnConfirm; private Map<String, Object>

2020-10-26 16:46:00 266

原创 https+retrofit实现多文件上传

okhttp、retrofit初始化自定义安全套接字socketpublic class Tls12SocketFactory extends SSLSocketFactory { private static final String[] TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"}; final SSLSocketFactory delegate; public Tls12SocketFactory(SSLSocketFact

2020-10-26 16:01:39 221

原创 录制视频

目录获取权限回传数据UI更新系统自带摄像机录制MainActivity回调工具类获取文件路径类视频源数据回传类获取权限PermissionUtils检查并获取权限,主要是对内存的读写、摄像头权限获取。public static boolean DeniedPermission(Context context, String permission) { return ContextCompat.checkSelfPermission(context, permission) == Pac

2020-10-23 14:50:04 125

原创 自定义RecyclerView.Adapter

自定义显示子项在ViewHolder中定义recyclerView列表中每个显示子项的具体样式布局文件<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/ap

2020-10-22 17:15:28 336 1

原创 获取本地音视频文件

打开本地文件所在目录// 获取本地音频public static void openAudioManager(Context context) { PermissionUtils.WriteStoragePermissionRequest(context); Intent mIntent = new Intent(Intent.ACTION_GET_CONTENT); //系统调用Action属性 mIntent.setType("audio/*"); /

2020-10-22 16:56:08 2707

原创 dialog置底部显示

BaseDialog定义public abstract class BaseDialog extends Dialog { protected Context context; protected Unbinder unbinder; protected View view; public BaseDialog(@NonNull Context context) { super(context); this.context = conte

2020-10-22 16:28:01 601

原创 ViewPager+Fragment+MagicIndicator实现多子界面带导航栏滑动

MagicIndicatorViewPager 指示器框架 —— MagicIndicator简单使用示例添加依赖dependencies { compile project(':magicindicator')}在布局文件中添加MagicIndicator<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

2020-10-22 16:07:55 1725 2

原创 findViewById报错空指针异常

问题在使用findViewById获取的组件为空,在注册点击事件报错空指针异常原因在当前Activity或fragment绑定的xml不是获取组件的root view,比如在一个fragment中有很多include,直接在fragment中获取include布局中组件则会报错空指针异常。解决当在xml中引用include标签时,如果要通过findViewById去获取include标签里面的控件,那就必须先获得include里面的根布局root,再通过root.findViewById()去获

2020-10-20 15:49:55 1487

原创 ToolBar使用总结

目录toolbarstyle配置toolbar布局NavigationIconNavigationIcon常用方法具体使用titleMenumenu的创建menu点击事件menu不同状态时操作menu菜单图标+标题同时显示fragment使用menu菜单style的配置style的基本配置app:theme & app:popupTheme修改toolbar的字体修改menu的字体颜色修改menu显示位置toolbarstyle配置 <style name="toolbar"&gt

2020-10-20 15:44:16 1404 1

原创 康佳应急广播 EmergRadioGX(KBTA100-B)项目

目录测试平台信息实时广播开播的指令交互apk与终端交互逻辑接口文件IP话筒通话协议终端心跳、一般应答数据包格式数据包的格式构造数据包解析测试平台信息IP:220.167.54.108端口号:8085账号:admin密码:123456实时广播开播的指令交互apk与终端交互逻辑App不下发指令给终端;App没法获取终端命令执行结果;App执行结果不是上报服务器,而是通过服务器将指令传递给终端;指令编解码工具是从 TAS 项目直接复制过来的,注释掉会报错的代码,所以基本相同。接口文件/*

2020-09-28 17:44:13 496

原创 2019年工作总结

目录2019年工作总结意大利项目项目背景iTV开发维护文档整理掌握的知识陕西咪咕项目开发RMS系统适配系统版本文件验收测试部署升级掌握的知识乐租小窝项目项目背景定位开发掌握的知识甘肃咪咕项目项目背景工作内容掌握的知识文档梳理sdk系统集成AndroidGit控制Java算法和设计模式2019年工作总结项目工作内容掌握知识意大利项目iTV开发维护、文档整理焦点拦截处理、ObjectAnimator、视频时移、rxjava、lifecycle、底层接口封装、软件项目流程管理、文档归

2020-09-28 17:42:16 427

原创 康佳应急广播 EmergRadioBZ(KBTA100-C)项目

目录测试信息创建广播适配器,资源调度器分别指什么?播放媒体、通道指什么?广播的输入内容输出通道、调频、IP具体指什么?适配器,资源调度器演练播发类型广播内容参数设置资源编码设置的具体规范要求周期、回传参数用来做什么?启/禁用维持用来做什么?项目架构设计媒体库、多文件上传、实时监听、历史回放媒体库多文件上传实时监听历史回放项目目录结构框架应用&业务实现EventBus框架的应用Stomp框架Navigation框架ProjectApplication版本文件更新数据更新实现加密连接创建网络请求接口封装

2020-09-28 17:42:04 837

转载 BottomNavigationView3个以上图标不显示文字

问题当BottomNavigationView设置的菜单中超过三个图标时,出现只有焦点聚集到图标时才会显示底部设置的文字描述,当没有焦点聚集则只显示图标,效果如下:解决办法设置labelVisibilityMode值如果BottomNavigationItemView类并没有setShiftingMode方法进入到BottomNavigationMenuView类中查看onMeasure方法,发现这个版本中判断方法已经改为isShifting由isShifting方法可见,当labelVi

2020-09-28 15:20:31 916

原创 BottomNavigationView设置底部图标切换

系统默认设置BottomNavigationView 默认底部其实是一张图片与颜色的切换,下面是系统自带的设置<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/navigation_home" android:icon="@d

2020-09-28 14:36:48 2357 1

原创 gitlab、github设置免密

生成SSH keywindows系统中,在任意位置右键单击,选择“Git Bash Here”。mac系统中,直接用终端进行操作。cd ~mkdir .sshcd .ssh在 .ssh目录下生成秘钥对:ssh-keygen -t rsa -C [你的邮箱名称] -b 4096Enter file in which to save the key (/Users/linxiaozhou/.ssh/id_rsa)这里会首先问你秘钥对(即公钥和私钥)的名称,你只需要输入名字即可。这个名字

2020-09-24 11:19:19 1074

原创 修改git远程仓库分支名称

# 重命名本地分支git branch -m 旧分支名 新分支名# 删除远程旧分支git push --delete origin 旧分支名# 将新分支推送至远程git push origin 新分支名# 将新本地分支和远程相连 git branch --set-upsteam-to origin/新分支名...

2020-09-24 10:13:30 1217

原创 如何将本地仓库项目push到github新建仓库

在GitHub新建仓库具体在GitHub上新建仓库的操作请见以下官方文档:github guide本地仓库提交# 本地仓库初始化git init# 将本地仓库修改的内容提交至本地缓存区git add .git commit -m "fisrt commit"# 因为新建远程仓库一般带有readme.txt文件,需要先拉取git pull origin master --allow-unrelated-historiesgit push origin master:master

2020-09-23 16:01:19 208

原创 Git报错-refusing to merge unrelated histories

报错fatal: refusing to merge unrelated histories,意为拒绝合并不相关的历史错误原因本地仓库和远程仓库实际上是独立的两个仓库解决$git pull origin master --allow-unrelated-histories

2020-09-23 15:54:15 74

原创 隐私协议&授权访问的实现

交互逻辑用户首次下载打开apk,先弹出用户隐私协议的确认框,如果不同意则进入再次确认的弹窗,如果仍旧不同意则直接退出应用;从再次确认的弹窗点去同意,又再次回到用户隐私协议的确认框;如果用户同意隐私协议,则弹出开启权限的弹窗,选择是否开启权限;进入用户登录界面,在此用户可以查看详细的隐私协议,并提示用户如果登录注册,则表示同意隐私协议的内容。隐私协议的实现隐私协议主要分为隐私协议确认弹窗、再次确认弹窗、使用协议&隐私政策弹窗、使用协议弹窗、隐私政策弹窗界面实现,以及业务交互逻辑。隐私协议

2020-09-22 17:00:37 7123

原创 Android ConstraintLayout 使用

Android ConstraintLayout 使用ConstraintLayout 是什么?约束属性倾向(Bias)垂直方向偏移Visibility 属性控件GONE的margin尺寸约束控件尺寸约束比例宽高都被约束链条样式GuidelineConstraintLayout 是什么?ConstraintLayout 能够灵活地定位和调整子View的大小,子 View 依靠约束关系来确定位置。在一个约束关系中,需要有一个 Source(源)以及一个 Target(目标),Source 的位置依赖于

2020-09-08 16:51:54 232

转载 ScrollView嵌套LinearLayout内容展示不全

解决方案布局替换将嵌套TextView,ImageView等这些组件的根布局ConstraintLayout替换为LinearLayout。底部边距给ScrollVIew里边的LineaerLayout添加底部边距,一般设置的高度可以参照界面顶部title栏的高度,目前title栏高度为110dp,设置LineaerLayout底部边距paddingBottom=“110dp”...

2020-09-08 15:22:28 685

原创 IPV6功能

如何判断终端是否实现IPV6功能?联网终端实现以IPV6协议接入网络,包括DHCP、PPOE、IPOE、LAN具体体现:有线方式成功接入网络之后,能够返回IPV6的信息,如IP地址,DNS地址,默认网关等信息。DNS解析终端向DNS服务器请求资源,DNS服务器下发IPV6地址,终端能解析IPV6地址,从而获取到请求返回的资源,如图片、TS流等。IPV6请求终端播放器能主动向DNS发起TS流请求,DNS返回地址,终端对地址进行解析得到IPV6地址,终端用IPV6地址再次向DNS发起请求,得到T

2020-07-29 14:18:03 549

原创 华为手机上高德sdk定位不准

问题在华为手机上测试高德sdk时,发现在切换城市或默认定位当前城市时,总是返回默认定位位置北京。原因由于华为的芯片是自主研发,导致和高德sdk的接口不兼容。因此无法准确定位。高德sdk定位的逻辑在手机上操作默认定位当前城市,实现定位的代码逻辑如下:在Activity中初始化AMap,MapView,GeocodeSearch几个对象@Override public void onCreate(Bundle savedInstanceState) { super.onCr

2020-06-11 16:50:57 3352

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除