<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_25017839的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_25017839</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_25017839]]></copyright><item><title><![CDATA[协程+Retrofit2.4封装一个网络请求框架]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/130587995</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/130587995</guid><author>qq_25017839</author><pubDate>Tue, 09 May 2023 20:28:59 +0800</pubDate><description><![CDATA[好久没写博客了，最近也是比较忙，新项目使用了协程和Retrofit2.6，开发过程中发现了Retrofit2.6上传文件不支持中文名称，排查发现是其Okhttp新版本不支持，只能降低Retorfit版本了，低版本的Retrofit也不支持协程了，需要自己封装一下，今天就记录一下封装方法以及使用。为了能像RxJava那种链式展示，我自定义了用于请求的DSL样式。扩展ViewModel类，添加一个requestApi方法。添加项目依赖，新项目还用到了lifecycle。在顶层文件中定义一个通用的请求方法。]]></description><category></category></item><item><title><![CDATA[解决Service中获取Resource匹配不准确问题]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/112304296</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/112304296</guid><author>qq_25017839</author><pubDate>Thu, 07 Jan 2021 10:37:46 +0800</pubDate><description><![CDATA[有时候我们开启了一个Service，需要在Service根据当前语言环境查找Resource时会获取不准确，很可能是没有更新当前Service的Resource配置文件，我们可以在Service中增加一个方法用于更新Resource配置文件


public static void setLanguage(Context context, Locale locale) {
    Locale.setDefault(locale);
    Resources resources = context.get]]></description><category></category></item><item><title><![CDATA[解决RecyclerView翻页滚动到不可见Item时焦点乱跑问题]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/112003091</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/112003091</guid><author>qq_25017839</author><pubDate>Thu, 31 Dec 2020 09:55:42 +0800</pubDate><description><![CDATA[最近在完善EPG布局的时候，发现了RecyclerView在滚动到下一条不可见的Item换页时，焦点会跑到其他控件上，参考了网上的一些做法，其中一条是重写LayoutManager中的onInterceptFocusSearch函数


//解决滚动过快焦点乱跑问题
@Override
public View onInterceptFocusSearch(View focused, int direction) {
    int count = getItemCount();//获取item的总数
   ]]></description><category></category></item><item><title><![CDATA[RecyclerView自定义StaggeredGridLayoutManager实现EPG布局]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/111605561</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/111605561</guid><author>qq_25017839</author><pubDate>Thu, 24 Dec 2020 10:14:31 +0800</pubDate><description><![CDATA[实现布局：



最近在做EPG功能，要求能够展示每个节目对应时间轴的预览节目信息，这种布局可以采用RecyclerView的瀑布流布局实现，但是测试的时候发现Item的position是没有规律的，这样就不能够很好的根据positoin去区分是哪个节目的EPG信息从而显示到不同行数上，所以需要从StaggeredGridLayoutManager源码改起

修改getNextSpan函数


/**
 * Finds the span for the next view.
 */
private Stag]]></description><category></category></item><item><title><![CDATA[解决RecyclerView聚焦时滚动到起始处的问题]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/111605050</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/111605050</guid><author>qq_25017839</author><pubDate>Thu, 24 Dec 2020 10:06:13 +0800</pubDate><description><![CDATA[最近在做EPG布局界面时，采用了一个Linearlayout布局嵌套多个RecyclerView来实现EPG通道信息展示的功能，但是在测试的时候发现，当RecyclerView左边子Item显示不全时，焦点从右侧移入时，RecyclerView会莫名其妙滚动到第一项，经过一番测试，发现是父布局LinearLayout聚焦在执行requestChildFocus函数时，聚焦的focusChild的index是-1，也就是没找到需要聚焦的子View，导致了RecyclerView莫名滚动到第一项，下面我们先从A]]></description><category></category></item><item><title><![CDATA[修改ExoPlayer源码播放hls显示多音轨]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/111604299</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/111604299</guid><author>qq_25017839</author><pubDate>Thu, 24 Dec 2020 09:38:23 +0800</pubDate><description><![CDATA[最近在研究哪种播放器能够支持drm视频播放，查找了一些资料，比较多的都是推荐谷歌播放器ExoPlayer，测试drm是可以正常播放，但是无法显示出多音轨和多字幕轨道信息，默认都是只有一条音轨和一条字幕轨，使用了官方提供的测试链接，发现官方的可以正常显示出来，于是我对比了公司和官方的m3u8文件，发现官方的会多一个这样的信息


#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2218327,BANDWIDTH=2227464,CODECS="avc1.640020,mp4a.40.2]]></description><category></category></item><item><title><![CDATA[Android TV 中RecyclerView聚焦Item实现居中功能]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/111580623</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/111580623</guid><author>qq_25017839</author><pubDate>Wed, 23 Dec 2020 11:24:47 +0800</pubDate><description><![CDATA[最近预研EPG一些界面功能的时候需要实现一种节目列表选中自动居中放大的功能，查找一些网上的资料，发现大多数是重写RecyclerView的布局管理器的smoothScrollToPosition函数，该方法通过修改滑动Scroller里面的偏移量来达到居中的效果，不过在测试的过程中我发现当按住遥控器一会再松开时，列表会滚动一段时间再停止，无法实现即停的效果，界面操作起来不是很友好。

经过一些资料的搜索，发现可以在适配器里面做居中操作，具体做法是Item添加一个聚焦的监听，然后对当前Item的坐标以及R..]]></description><category></category></item><item><title><![CDATA[解决Android中onActivityResult提前执行的问题]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/111573680</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/111573680</guid><author>qq_25017839</author><pubDate>Wed, 23 Dec 2020 10:26:46 +0800</pubDate><description><![CDATA[要启动的EPGActivity


int 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]]></description><category></category></item><item><title><![CDATA[安卓VLC编译遇到的问题及解决办法]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/104007841</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/104007841</guid><author>qq_25017839</author><pubDate>Thu, 16 Jan 2020 17:03:26 +0800</pubDate><description><![CDATA[1、git需要请求用户



配置下你的git账号信息，如果没有需要自己去创建一个哦，比如


git config --global user.emaili xxx@qq.com

git config --global user.name xxx

配置完后需要删除掉vlc文件夹，不然git clone会出错

2、Source option 5 is no longer supported ...]]></description><category></category></item><item><title><![CDATA[安卓vlc编译]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/104007639</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/104007639</guid><author>qq_25017839</author><pubDate>Thu, 16 Jan 2020 16:56:18 +0800</pubDate><description><![CDATA[环境：虚拟机Ubuntu 18.04桌面版64位（建议自己搞个虚拟机安装Ubuntu系统，不要用云服务器的，云服务器可能会缺失某些文件导致编译失败），ssr

（由于编译过程中会出现下载不到依赖包的问题，需要Ubuntu虚拟机共享主机的SSR实现翻墙，下面的操作需要在虚拟机里面操作，不可用xshell连接操作）

一、安装工具

先更新下：


sudo apt-get update


sudo...]]></description><category></category></item><item><title><![CDATA[Android7.0适配之——版本升级不跳转应用安装页面的完美解决]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/100122053</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/100122053</guid><author>qq_25017839</author><pubDate>Wed, 28 Aug 2019 16:35:00 +0800</pubDate><description><![CDATA[1.在AndroidManifest.xml文件中，添加REQUEST_INSTALL_PACKAGES权限




&lt;uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /&gt;



2.在打开安装包的代码中添加**兼容Android 8.0**的代码。




    /**
  ...]]></description><category></category></item><item><title><![CDATA[安卓应用加入patch功能]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/100040871</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/100040871</guid><author>qq_25017839</author><pubDate>Fri, 23 Aug 2019 16:28:10 +0800</pubDate><description><![CDATA[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 ...]]></description><category></category></item><item><title><![CDATA[在原有项目加入NDK支持]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/100040716</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/100040716</guid><author>qq_25017839</author><pubDate>Fri, 23 Aug 2019 16:05:03 +0800</pubDate><description><![CDATA[1、新建一个带有ndk的空项目

2、复制带有ndk项目的一些文件到无ndk项目中

（1）app目录下的.externalNativeBuild



（2）main目录下的cpp文件



（3）app目录下的CMakeLists.txt



（4）在app的build.gradle的android节点中加入以下代码


externalNativeBuild {
    	cmake {
...]]></description><category></category></item><item><title><![CDATA[BSDiff生成差分包]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/100039835</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/100039835</guid><author>qq_25017839</author><pubDate>Fri, 23 Aug 2019 15:50:02 +0800</pubDate><description><![CDATA[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文件（补丁）

通常的做法...]]></description><category></category></item><item><title><![CDATA[Android AIDL使用详解]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/94434904</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/94434904</guid><author>qq_25017839</author><pubDate>Tue, 02 Jul 2019 11:24:11 +0800</pubDate><description><![CDATA[一、概述
AIDL 意思即 Android Interface Definition Language，翻译过来就是Android接口定义语言，是用于定义服务器和客户端通信接口的一种描述语言，可以拿来生成用于IPC的代码。
目的就是为了实现进程间通信。通常，暴露方法给其他应用进行调用的应用称为服务端，调用其他应用的方法的应用称为客户端，客户端通过绑定服务端的Service来进行交互
二、语法

A...]]></description><category></category></item><item><title><![CDATA[Windows下adb常用命令]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/89959412</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/89959412</guid><author>qq_25017839</author><pubDate>Wed, 08 May 2019 16:24:32 +0800</pubDate><description><![CDATA[一、连接设备
 adb connect +设备ip地址

二、断开连接设置
 adb disconnect +设备ip地址

三、查看已经连接的设备信息
 adb devices

四、安装应用
 adb install +应用的路径

五、卸载应用
 adb uninstall +应用的包名（如omp150的包名为com.wellav.omp.hoteltv）

六...]]></description><category></category></item><item><title><![CDATA[Android 9.0 使用AndroidVideoCache时不能缓存视频]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/89948220</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/89948220</guid><author>qq_25017839</author><pubDate>Wed, 08 May 2019 11:22:33 +0800</pubDate><description><![CDATA[项目中使用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

...]]></description><category></category></item><item><title><![CDATA[Android 9.0 http网络请求问题]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/89914432</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/89914432</guid><author>qq_25017839</author><pubDate>Tue, 07 May 2019 09:25:52 +0800</pubDate><description><![CDATA[Google表示，为保证用户数据和设备的安全，针对下一代 Android 系统(Android P) 的应用程序，将要求默认使用加密连接，这意味着 Android P 将禁止 App 使用所有未加密的连接，因此运行 Android P 系统的安卓设备无论是接收或者发送流量，未来都不能明码传输，需要使用下一代(Transport Layer Security)传输层安全协议，而 Android No...]]></description><category></category></item><item><title><![CDATA[Windows和Ubuntu系统之间文件相互复制粘贴]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/89848011</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/89848011</guid><author>qq_25017839</author><pubDate>Sun, 05 May 2019 16:09:51 +0800</pubDate><description><![CDATA[在安装Ubuntu系统后发现与Windows系统的文件不能相互复制，网上查了很多教程，发现都是不能用的，能实现的方法如下所示：

第一步： sudo apt-get autoremove open-vm-tools

第二步：sudo apt-get install open-vm-tools-desktop

然后重启

搞定


...]]></description><category></category></item><item><title><![CDATA[Ubuntu下Android NDK安装与配置]]></title><link>https://blog.youkuaiyun.com/qq_25017839/article/details/89847878</link><guid>https://blog.youkuaiyun.com/qq_25017839/article/details/89847878</guid><author>qq_25017839</author><pubDate>Sun, 05 May 2019 16:07:21 +0800</pubDate><description><![CDATA[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...]]></description><category></category></item></channel></rss>