- 博客(38)
- 资源 (3)
- 收藏
- 关注
原创 协程+Retrofit2.4封装一个网络请求框架
好久没写博客了,最近也是比较忙,新项目使用了协程和Retrofit2.6,开发过程中发现了Retrofit2.6上传文件不支持中文名称,排查发现是其Okhttp新版本不支持,只能降低Retorfit版本了,低版本的Retrofit也不支持协程了,需要自己封装一下,今天就记录一下封装方法以及使用。为了能像RxJava那种链式展示,我自定义了用于请求的DSL样式。扩展ViewModel类,添加一个requestApi方法。添加项目依赖,新项目还用到了lifecycle。在顶层文件中定义一个通用的请求方法。
2023-05-09 20:28:59
494
原创 解决Service中获取Resource匹配不准确问题
有时候我们开启了一个Service,需要在Service根据当前语言环境查找Resource时会获取不准确,很可能是没有更新当前Service的Resource配置文件,我们可以在Service中增加一个方法用于更新Resource配置文件public static void setLanguage(Context context, Locale locale) { Locale.setDefault(locale); Resources resources = context.get
2021-01-07 10:37:46
530
1
原创 解决RecyclerView翻页滚动到不可见Item时焦点乱跑问题
最近在完善EPG布局的时候,发现了RecyclerView在滚动到下一条不可见的Item换页时,焦点会跑到其他控件上,参考了网上的一些做法,其中一条是重写LayoutManager中的onInterceptFocusSearch函数//解决滚动过快焦点乱跑问题@Overridepublic View onInterceptFocusSearch(View focused, int direction) { int count = getItemCount();//获取item的总数
2020-12-31 09:55:42
1646
1
原创 RecyclerView自定义StaggeredGridLayoutManager实现EPG布局
实现布局:最近在做EPG功能,要求能够展示每个节目对应时间轴的预览节目信息,这种布局可以采用RecyclerView的瀑布流布局实现,但是测试的时候发现Item的position是没有规律的,这样就不能够很好的根据positoin去区分是哪个节目的EPG信息从而显示到不同行数上,所以需要从StaggeredGridLayoutManager源码改起修改getNextSpan函数/** * Finds the span for the next view. */private Stag
2020-12-24 10:14:31
1558
1
原创 解决RecyclerView聚焦时滚动到起始处的问题
最近在做EPG布局界面时,采用了一个Linearlayout布局嵌套多个RecyclerView来实现EPG通道信息展示的功能,但是在测试的时候发现,当RecyclerView左边子Item显示不全时,焦点从右侧移入时,RecyclerView会莫名其妙滚动到第一项,经过一番测试,发现是父布局LinearLayout聚焦在执行requestChildFocus函数时,聚焦的focusChild的index是-1,也就是没找到需要聚焦的子View,导致了RecyclerView莫名滚动到第一项,下面我们先从A
2020-12-24 10:06:13
1156
1
原创 修改ExoPlayer源码播放hls显示多音轨
最近在研究哪种播放器能够支持drm视频播放,查找了一些资料,比较多的都是推荐谷歌播放器ExoPlayer,测试drm是可以正常播放,但是无法显示出多音轨和多字幕轨道信息,默认都是只有一条音轨和一条字幕轨,使用了官方提供的测试链接,发现官方的可以正常显示出来,于是我对比了公司和官方的m3u8文件,发现官方的会多一个这样的信息#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2218327,BANDWIDTH=2227464,CODECS="avc1.640020,mp4a.40.2
2020-12-24 09:38:23
1189
2
原创 Android TV 中RecyclerView聚焦Item实现居中功能
最近预研EPG一些界面功能的时候需要实现一种节目列表选中自动居中放大的功能,查找一些网上的资料,发现大多数是重写RecyclerView的布局管理器的smoothScrollToPosition函数,该方法通过修改滑动Scroller里面的偏移量来达到居中的效果,不过在测试的过程中我发现当按住遥控器一会再松开时,列表会滚动一段时间再停止,无法实现即停的效果,界面操作起来不是很友好。经过一些资料的搜索,发现可以在适配器里面做居中操作,具体做法是Item添加一个聚焦的监听,然后对当前Item的坐标以及R..
2020-12-23 11:24:47
2498
3
原创 解决Android中onActivityResult提前执行的问题
要启动的EPGActivityint requestCode=1;Intent intent = new Intent(this,EPGActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivityForResult(intent,requestCode);EPGActivity返回携带的数据Intent intent = new Intent();intent.putExtra("positi
2020-12-23 10:26:46
541
原创 安卓VLC编译遇到的问题及解决办法
1、git需要请求用户配置下你的git账号信息,如果没有需要自己去创建一个哦,比如git config --global user.emaili xxx@qq.comgit config --global user.name xxx配置完后需要删除掉vlc文件夹,不然git clone会出错2、Source option 5 is no longer supported ...
2020-01-16 17:03:26
951
原创 安卓vlc编译
环境:虚拟机Ubuntu 18.04桌面版64位(建议自己搞个虚拟机安装Ubuntu系统,不要用云服务器的,云服务器可能会缺失某些文件导致编译失败),ssr(由于编译过程中会出现下载不到依赖包的问题,需要Ubuntu虚拟机共享主机的SSR实现翻墙,下面的操作需要在虚拟机里面操作,不可用xshell连接操作)一、安装工具先更新下:sudo apt-get updatesudo...
2020-01-16 16:56:18
509
原创 Android7.0适配之——版本升级不跳转应用安装页面的完美解决
1.在AndroidManifest.xml文件中,添加REQUEST_INSTALL_PACKAGES权限<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />2.在打开安装包的代码中添加**兼容Android 8.0**的代码。 /** ...
2019-08-28 16:35:00
407
原创 安卓应用加入patch功能
1、bsdiff-4.3.tar.gz解压出来,复制bspatch.c到cpp目录下2、在项目中的cpp目录下新建bzip文件夹3、bzip2-1.0.5-src.zip解压出来,将bzip2-1.0.5-src\src\bzip2\1.0.5\bzip2-1.0.5路径下的文件复制到第2步创建的bzip目录下整体cpp目录如下:4、修改dspatch.c文件,将其中的#include ...
2019-08-23 16:28:10
1092
原创 在原有项目加入NDK支持
1、新建一个带有ndk的空项目2、复制带有ndk项目的一些文件到无ndk项目中(1)app目录下的.externalNativeBuild(2)main目录下的cpp文件(3)app目录下的CMakeLists.txt(4)在app的build.gradle的android节点中加入以下代码externalNativeBuild { cmake {...
2019-08-23 16:05:03
198
原创 BSDiff生成差分包
BSDiff官网(v4.3):http://www.daemonology.net/bsdiff/依赖bzip2库:https://nchc.dl.sourceforge.net/project/gnuwin32/bzip2/1.0.5/bzip2-1.0.5-src.zip核心思想尽可能多的利用old文件中已有的内容,尽可能少的加入新的内容来构建new文件(补丁)通常的做法...
2019-08-23 15:50:02
2816
原创 Android AIDL使用详解
一、概述AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。目的就是为了实现进程间通信。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的Service来进行交互二、语法A...
2019-07-02 11:24:11
328
原创 Windows下adb常用命令
一、连接设备 adb connect +设备ip地址二、断开连接设置 adb disconnect +设备ip地址三、查看已经连接的设备信息 adb devices四、安装应用 adb install +应用的路径五、卸载应用 adb uninstall +应用的包名(如omp150的包名为com.wellav.omp.hoteltv)六...
2019-05-08 16:24:32
2521
原创 Android 9.0 使用AndroidVideoCache时不能缓存视频
项目中使用AndroidVideoCache作为视频缓存组件,但是在安卓9.0手机上无法正常缓存,并且报错主要报错文本:com.danikula.videocache.ProxyCacheException: Error opening connection for http://127.0.0.1:34851/ping with offset 0. Version: 2.7.0...
2019-05-08 11:22:33
3845
原创 Android 9.0 http网络请求问题
Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android No...
2019-05-07 09:25:52
180
转载 Windows和Ubuntu系统之间文件相互复制粘贴
在安装Ubuntu系统后发现与Windows系统的文件不能相互复制,网上查了很多教程,发现都是不能用的,能实现的方法如下所示:第一步: sudo apt-get autoremove open-vm-tools第二步:sudo apt-get install open-vm-tools-desktop然后重启搞定...
2019-05-05 16:09:51
1569
1
原创 Ubuntu下Android NDK安装与配置
Ubuntu下Android NDK安装与配置1、下载Android NDK自解压包,官方地址:https://developer.android.com/ndk/downloads/index.html#download下载:$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin...
2019-05-05 16:07:21
837
原创 Ubuntu下Android SDK安装与配置
Ubuntu下Android SDK安装与配置(1)下载SDK:http://tools.android-studio.org/index.php/sdk(2)解压下载的压缩包 tar -zxvf android-sdk_r24.4.1-linux.tgz3、配置PATH路径:命令:$ sudo vim /etc/profile,在文件末尾加入如下内容:#android s...
2019-05-05 16:03:20
13212
原创 Ubuntu下Android JDK安装与配置
Ubuntu下Android JDK安装与配置(1)下载JDK :http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html(2)解压下载的压缩包:tar -zxvf jdk-8u181-linux-x64.tar.gz3、配置PATH路径:命令:$ sudo vim /...
2019-05-05 16:02:33
722
原创 在Ubuntu下编译ijkPlayer库
1、自行在Ubuntu下配置好Android的sdk和ndk(sdk配置:https://blog.youkuaiyun.com/qq_25017839/article/details/89847824 ndk配置:https://blog.youkuaiyun.com/qq_25017839/article/details/89847878)2、安装git和yasm。打开终端,依次输入如下指令:su...
2019-05-05 16:00:36
188
原创 Json数据工具
******************************* Json 数据解析 *****************************///判断json数据是否包含某个数据, Json数组public static JSONArray getJsonArray(JSONObject js, String key) throws Exception { JSONArray j...
2019-04-29 13:31:28
232
原创 Android加载图片导致内存溢出(OOM)
方案一、读取图片时注意方法的调用,适当压缩 尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bit...
2019-04-29 13:29:23
637
原创 颜色透明值(备用)
透明度 16进制表示100 % 0099 % 0398 % 0597 % 0796 % 0A95 % 0D94 % 0F93 % 1292 % 1491 % 1790 % 1A89 % 1C88 % 1E87 % 2186 % 2485 % 2684 % 29...
2019-04-29 10:46:24
1915
原创 安卓系统签名apk静默升级方法
实现静默安装首先手机就有root权限或者是system应用(使用厂商提供的签名文件签名过)下面是实现静默升级的步骤:1、在AndroidManifest文件中添加权限<uses-permissionandroid:name="android.permission.INSTALL_PACKAGES"tools:ignore="ProtectedPermissions" /...
2019-04-29 10:42:49
1846
原创 安卓系统签名apk静默升级方法
实现静默安装首先手机就有root权限或者是system应用(使用厂商提供的签名文件签名过)下面是实现静默升级的步骤:1、在AndroidManifest文件中添加权限<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermiss...
2019-04-29 08:58:31
685
原创 Android Studio下正确引用jar包
本篇基于Android Studio3.0版本将需要用到的jar包拷贝到项目目录app/libs下方法1、添加compile打开app下的build.gradle,在dependencies里面添加implementation files('libs/jar包名称.jar'),如图添加完编译一遍就可以使用了方法2、在拷贝完jar到libs目录后,右击添加的jar包...
2019-04-28 11:28:58
4118
3
原创 AndroidVideoCache实现边播边缓存功能
AndroidVideoCache 通过代理的策略实现一个中间层将我们的网络请求转移到本地实现的代理服务器上,这样我们真正请求的数据就会被代理拿到,这样代理一边向本地写入数据,一边根据我们需要的数据看是读网络数据还是读本地缓存数据再提供给我们,真正做到了数据的复用。下面是使用方法:首先在AS用户一行代码在gradle中导包dependencies{ complie ‘com...
2019-04-28 11:27:57
887
原创 Android屏幕适配
我这里要讲的是使用dp来进行适配(Google推荐的也是这种方式),使用这种方式项目中多套dimens.xml文件才占几百K。以某一widthDP为基准,生成所有设备对应的dimens.xml文件生成这些文件(网上已经有大神android阿杜提供了自动生成工具)。工具使用步骤:1、在Android Studio中安装ScreenMatch插件2、在项目的默认values文件夹中需要一...
2019-04-28 11:12:47
173
原创 Android Studio下JNI开发步骤文档
第一种适用于创建的项目一开始没有包含C++支持的1、安装好需要用到的工具:打开SDK Manager,Android SDK ->SDK Tools,选中Cmake、LLDB、NDK,然后点击apply,等待下载完成。接着打开File -> Project Structure ->SDK Location查看NDK路径是否正确,一般在Android Studio下载ndk,目...
2019-04-28 11:11:48
1714
原创 LruCache内存缓存与DiskLruCache硬盘缓存完美集合
最近在项目中需要做到海报动态分类,为了防止多图出现OOM的情况,采用了比较主流的LruCache技术。该技术主要是使用LruCache和DiskLruCache实现双缓存的,LruCache使用运行内存进行存储,DiskLruCache使用的是缓存(cache),当内存存储达到设定的比例后,就会采取DiskLruCache。下面简单介绍这2个的使用方法。1、LruCache(1)初始化Lr...
2019-04-28 11:10:21
274
原创 Android 前台服务
普通的Service容易被系统回收,而前台服务系统优先级更高,不易被回收。下面介绍下前台服务的几种实现方法。1. 提高Service的优先级:<!-- 为防止Service被系统回收,可以尝试通过提高服务的优先级解决,1000是最高优先级,数字越小,优先级越低 --> android:priority="1000"2.把service写成系统服务,将不会被回收:...
2019-04-28 11:09:14
510
原创 VideoView解决内存泄漏
最近在调试项目的时候,用LeakCanary测试内存泄漏时,在安卓4.4版本发现AudioManager引起了内存泄漏,而安卓6.0则不会,经过多方查找,确定了是VideoView导致的,原来是AudioManager可能会长时间持有Context,当使用者(这里即VideoView)请求了音频的焦点却没有及时释放,以下提供2种解决方法,原理都是一样,即让AudioManager持有A...
2019-04-28 11:07:32
885
原创 安卓使用WindowManager开发安卓悬浮窗
Android中我们可以使用WindowManager来生成悬浮窗。WindowManager的三个最常用方法为:①addView 添加ViewaddView(View view, WindowManager.LayoutParams params);View就是要添加到windowmanager中的对象,而params是窗口的设置参数,这个我们讲到代码阶段再说。②removeV...
2019-04-28 11:05:22
824
原创 GridView无焦点时存在Selector状态问题
最近在做点播功能时,发现有些电视GridView焦点不在时,之前选中的Item还有Selector状态。经过一番资料查找,总结几个方法(目前项目用的是第3种):1、item默认firs item selected 那么他的selector会成selected状态,可以设置gridview.setFocusable(false)来解决,但是这样需要手动设置遥控器事件,用起来比较繁琐。2、当焦点离...
2019-04-28 11:02:10
294
原创 Java中八种单例模式以及各自的优缺点
1、饿汉式(静态常量)[可用]public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return INS...
2019-04-28 10:58:03
630
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人