`
VIP庚
  • 浏览: 220780 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
最近再弄实时视频通话方面,参考了很多资料,自己写了个demo,供大家参考,毕竟网上的资料也不多    先介绍视频的传输,通过H264编码,rtp协议进行传输,后面后github下载地址    一 流程:    1、通过Camera的回调函数,得 ...
一 实现心跳检测 原理:当服务端每隔一段时间就会向客户端发送心跳包,客户端收到心跳包后同样也会回一个心跳包给服务端 一般情况下,客户端与服务端在指定时间内没有任何读写请求,就会认为连接是idle(空闲的)的。此时,客户端需要向服务端发送心跳消息,来维持服务端与客户端的链接。那么怎么判断客户端在指定时间里没有任何读写请求呢?netty中为我们提供一个特别好用的IdleStateHandler来干这个苦差事! 在服务端工作线程中添加: arg0.pipeline().addLast("ping", new IdleStateHandler(25, 15, 10,TimeUn ...
简单介绍 Robolectric测试框架,能一定程度解决了这种困扰。它的设计思路便是通过实现一套jvm能运行的android代码,从而做到脱离android环境进行测试。Robolectric有一些shadow类,使用它们,可以替换掉android相关类,代替它们在jvm上运行。 方案介绍: 本方案的目的是通过Robolectric运行起来一个三方的SDK,并部署到docker容器中 1、使用 Robolectric 模拟 Android 环境,将 SDK 运行于 Jvm 虚拟机上 2、使用 Netty 暴露服务,通过https接口,调用SDK内部的方法 3、将 SDK aar 解压,把 c ...
    Docker安装完成后就是要部署自己所需要的镜像,镜像来源一般在:https://hub.docker.com   docker hub上有各种牛人已经部署好环境和服务的镜像,我们直接下载下来就可以使用了,有些镜像可能不满足我们的需要,这时候就可以 ...
    Docker系列文章会将我在实际工作开发过程中用到的分享出来,很多基础使用规则可能不会提及,同时也会分享自己已经部署好环境的一些镜像。     个人对Docker的理解是一个大的池子,池子里面有许多容器,每个容器就是一个类似Linux虚拟机,各个容器相互独立互不影响,容器里面一般是Linux操作系统,可以运行各种服务。现阶段我这边docker上有Jenkins服务、Sonarqube服务、Android打包构建服务等。     docker好处显而易见,容器的移植特别特别方便,容器中的环境只要部署一次后,可以将容器打包,然后随意再另外台机器上重新部署,效率特别高。公司的打包服务器经常 ...

2018 Flag

     一年多没写博客了,2018年工作太忙了,但是也收获到很多,平时会把点点滴滴记在笔记中,久而久之就把博客这东西荒废了,很多朋友私信我,加我QQ,刚开始的时候我还是很热情的回答,但是随着工作的压力和对自己要求的放松,很多问题我都没有回答,也选择了逃避。      2018年, 我想重新拾起博客,将以前记录下来的东西好好整理番,不光是为了分享出来,也是为了对知识的总结吧,从而更好提高自己      那么立个Flag吧,之后每个月会出一遍技术分享,包括但不限于 Gradle、Docker、Python、蓝牙、Sonarqube、自定义Lint、Jenkins、Appium等,这是我去年的收 ...
    在项目做到中后期的时候,基本会有多个甚至十几个模块构成。各个模块相对独立,但有些又相互依赖。      现阶段公司的各个模块有单独的仓库管理,通过导入其他模块的aar来实现依赖,这种方式简单快捷,但当一个仓库更新后,其他仓库就需要手动拷入改版本的aar,这样既不利于版本管理,又比较麻烦。      这时我们就需要通过maven来发布各自仓库的版本到Maven仓库中,然后每个仓库就可以通过maveb来引用所需要的依赖。      公司内部会自己搭建私有Maven仓库,就把包发布到私有Maven仓库当中。在当前module的gradle中进行maven发布的配置 uploadArchi ...
最近遇到一个需求,下面记录下实现方法 以及遇到的一些坑 需求如下:当app在后台时 收到push消息用系统的Notification进行通知;当app在前台时 收到push后采用自定义风格弹出通知 效果如下: 第一种情况这里不探究  第二种情况这里采用PopWindow实现 步骤: 一 、实现自定义PopWindow类 public class TuyaPopWindow extends PopupWindow { private Activity mContext; private View view; //private ImageV ...
以下只是自己的一些总结,欢迎讨论 通过NDK编译jni网上有很多例子,在这我只总结在Android源码下编译 1、android源码环境下编译so包,编出来的.so的包前面不会自动给添加lib,NDK编译会自动给添加lib,即使Android.mk文件里面LOCAL_MODULE :=名字前面没有lib,NDK也会自动给你添加lib. 所以NDK编译时Android.mk文件编译出来的so包名字可以加lib也可不加,但源码下编译必须加 2、系统应用和用户应用的区别    在package/app下的工程 编译后生成的apk都会在system/app下 将系统 烧录到手机后 这些apk都 ...
  最近帮别人汉化了几款app,在这我简单介绍下我所使用的方法和所遇到的坑。   一般汉化都是通过反编译app,然后修改资源文件中的String.xml,将英文改为中文。具体反编译、打包的方法请参照郭神的一篇文章   http://blog.csdn.net/guolin_blog/article/details/49738023/   修改好资源文件后,在用自己的keystore打包一下,这样汉化就成功了。   上面说的汉化只能汉化一部分,这部分是app中通过string.xml定义的,那如果在代码中直接定义的一些资源该如何修改成中文呢?     我们通过apktool得到的文件夹中有sm ...
  最近一直在学习android框架,也就没怎么写博客了。前几天看到微信里推送的一篇博客,觉得动画很酷炫,就钻研了一番,这里我只是简单实现下,并说说实现原理和遇到的坑。有兴趣的可以参考:http://blog.csdn.net/zxt0601/article/details/53040506 这里面详细介绍了一番。实现方法 有些差异。   效果图:   这里我通过PathMeasure和Path实现,简单介绍下PathMeasure   PathMeasure是用来操作Path的,初始化 mPathMeasure=new PathMeasure(); //forc ...
    将一个图片通过写入外部存储后,打开系统图库找不到该图片,因为系统图库属于多媒体库,我们保存图片后未通知多媒体扫描,所以看不到保存的图片了     4.4以下可以通过发送广播通知多媒体库自动扫描,filePath是图片保存的完整路径 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath)));       4.4 Android把系统广播的权限回收了,只有系统应用才可以发送系统广播  所以4.4以上可以通过 Media ...
  最近要将拍的照片写入到手机外部存储中,开始测试时一点问题都没有,当测试6.0时就会出现写入失败,一看log说是没有权限,可我已近加入了 WRITE_EXTERNAL_STORAGE 这个权限呀,到网上一查,原来6.0系统 新增了运行时权限动态检测。 由于最近较忙,我直接将我觉得写得好不错的博客复制过来 供参考 运行时权限介绍 Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上, 又新增了运行时权限动态检测,以下权限都需要在运行时判断: 身体传感器 日历 摄像头 通讯录 地理位置 麦克风 电话 短信 存储空间 运行时权限处理 Android6.0 ...
问题描述:     开发中,遇到退出登录时,需要将界面跳转到登录界面,并将栈中所有Activity清空。 解决办法 Intent intent = new Intent(A.this,B.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); startActivity的时候传递FLAG_ACTIVITY_CLEAR_TASK这个标志,那么这个标志将会清除之前所有已经打开的activity.然后将会变成另外一个空栈的root,然后 ...
  在对话框初始的时候,设置 mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 可以让对话框始终显示在其他应用程序的window之上,也就是说这个dialog始终处于最上层,对用户始终可见,也就是说用户按了home之后dialog还在。   这样做需要加上权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />   但是某些手机对底层进行了修改 ...
Global site tag (gtag.js) - Google Analytics