首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

Android开发;教你做一个后台相机

做过相机的同学都知道,Camera需要一个SurfaceView来承载预览的输出流,SurfaceView的特性限制了它必须要有一个可见的View才能够使用。 所以如果我们要做一个不可见的相机有什么办法呢? 初阶黑科技 首先可以想到的是我们可以用一个 1*1 像素的SurfaceView来承载输出流。又或者我们用一个透明的View来承载SurfaceView。 网上搜一下可以找到很多这个方案的实现, 但是! 这意味着但跟我们的app退出到后台的时候,Camera就不能够拍照了! 那么有没有更好的解决方案呢? 当然有! 高阶黑科技 此时我们要介绍一个平时用的少的类,SurfaceTexture。 Camera提供了两个方法来设置预览界面,分别是 public native final void setPreviewSurface(Surface surface) throws IOException; public native final void setPreviewTexture(SurfaceTexture surfaceTexture) throws IOException; 当用SurfaceTexture作为预览的输出流承载的时候,其实是不需要一个可见的View的。 这提供了一个思路,可以在Service里用它来实现后台拍照的功能。 如何用呢 我们假设一个需求,用户的手机有锁屏密码,他的手机丢失了以后被别人尝试用去解锁,当然别人解锁的话肯定会失败,那么我们可以在他解锁失败的时候启动相机服务,然后用前置摄像头拍照。当我们拿到拍下来的相片后就可以通过各种方式回传给用户了。 这种场景下我们的应用肯定不会在前台出现,所以我们只能通过Service的方式来实现。 首先是解锁的监听 这部分很简单,我们可以继承并重写 DeviceAdminReceiver 来实现。这是一个系统提供的用来监听用户密码状态的类,具体用法可以参考后面给出的demo。 然后是Camera 使用Camera的话都需要先获取硬件Camera并初始化相关的参数, 这里给出demo代码 private Camera getCamerInstance() { android.hardware.Camera c = null; if(mCamera != null) { return mCamera; } int cameraNum = android.hardware.Camera.getNumberOfCameras(); Log.d(TAG, "camera number: " + cameraNum); try { c = android.hardware.Camera.open(); mCameraId = android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK; } catch (Exception e) { Log.e(TAG, "initiate Camera failed"); e.printStackTrace(); } return c; } 然后我们需要设置一个SurfaceTexture, mTexture = new SurfaceTexture(0); try { mCamera.setPreviewTexture(mTexture); mCamera.startPreview(); } catch (IOException e) { Log.e(TAG, "initiate camera failed, e: " + e.getMessage()); } 之后就可以通过Camera的takePicture()来获取相机输出流啦~ 源码https://github.com/AndroidPhoenix/SilentCamera 更多Android进阶技术,面试资料系统整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

优秀的个人博客,低调大师

开发笔记14 | Java 代码规约第 4 条

返回规约清单列表 规约类型:编程规约 - 命名风格 规约级别:强制 规约描述:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式 正例: localValue / getHttpMessage() / inputUserId 驼峰式命名法分大驼峰式命名法(UpperCamelCase)和小驼峰式命名法(lowerCamelCase)。 有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。 名字从散文形式(prose form)开始: 把短语转换为纯ASCII码,并且移除任何单引号。例如:"Müller’s algorithm"将变成"Muellers algorithm"。 把这个结果切分成单词,在空格

优秀的个人博客,低调大师

开发函数计算的正确姿势 —— 排查超时问题

写不尽的 code,查不完的 bug 通常我们写 bug,哦,不对,写代码时总不会一帆风顺,往往各种 bug 充斥其中,即使测试有较高的代码覆盖率往往也会有漏网之鱼。能写出一些比较隐蔽或者看起来像 feature 的 bug,并且经过了测试、code review 等层层的考验,最终 merge 到主干,这也算的上是一种本事。 这次,我们讨论的场景是,当你制造的 bug 被别人发现或者不小心把自己坑了,而不得不去 fix,且你自己也忘了这个 bug 是怎么写的了,在这种情况下,如何排查问题? 一气呵成,bug 侧漏 var request = require('request'); exports.handler = function(event, context, callback) { console.log("event:

优秀的个人博客,低调大师

开发笔记4 | Java 代码规约第 3 条

返回规约清单列表 规约类型:编程规约 - 命名风格 规约级别:强制 规约描述:类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外: DO / BO / DTO / VO / AO 正例: MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例: macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion 驼峰式命名法分大驼峰式命名法(UpperCamelCase)和小驼峰式命名法(lowerCamelCase)。 有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。 名字从散文形式(prose f

优秀的个人博客,低调大师

Java开发5年,如何继续提升技术实力?

技术实力可以分为两层: 对技术知识和框架本身的掌握程度,比如你熟悉redis、memcached等的用法。 运用技术知识和框架解决实际问题的能力。 很多人觉得,我熟悉这种技术,了解API,会做一些小例子,就有技术实力了。但实际上,一个人的技术实力,练不到第二层,都是瞎扯淡。 所以我们接下来要讨论的是运用技术知识和框架解决实际问题的能力。 提升技术实力,关键的是实践、实践、实践。通常有两种靠谱的方法: 找一个能够频繁给你高强度刺激的工作环境,你可以不断去实践,想停下来都不行 主动的、有意识的去做专项练习和综合练习 先说第一个,比如你在一个朝九晚五相对悠闲的公司,节奏缓慢,半年出一个版本,那就换到 996 的公司、一周一个版本的那种,Ok,自然你的技术实力就提高得快,HIGH得你不要不要的。 不过很多人是叶公好龙,不会为了提升技术实力而这么残害自己的。然而说实话,这几乎是唯一靠谱的方法。 再说第二种方法,有意练习。这是对一种方法的补充哦。注意,是补充。因为大部分的人,没有主动、有意的练习的能力。简单讲,就是不愿意为了获得某种实力而积极主动给自己加压,总想着哎呀是不是有什么方法、捷径,我照着一学,技术实力就上去了。 我可以坦白讲,没有的事!别做梦了。 所以,这第二种方法,只适用于那些愿意给自己压力、愿意逼迫自己前进的人。而且,它的目的,也是给自己创造实践的机会。 比如你学习了 Netty ,那就在一段时间内,高频度的去使用它,把你的项目的服务器,用它来重写。公司不允许的话,你就自己下班了搞一个自己的项目,反复用反复练啊。 比如你学习了正则表达式,那就把你代码中所有的字符串匹配,都改用正则。这样还不够,还要专门设计一些正则的练习题,用到它的各种匹配方式。甚至你还可以写一个正则表达式的验证工具,给别人去使用,帮助别人学习正则表达式。 这才是主动的、有意的练习。 高频度的外部刺激,加主动的、有意的练习,再加上定期的复盘,就能很快提升技术实力。 这是唯一可行的方法。 所以,你接下来可以: 梳理你熟悉的框架,把对知识点的掌握分为三个层次,知道有这回事、了解怎么用、能写DEMO。 创造环境,有意练习这三个层次的知识点,练到第四个层次——能在合适的场景下,不假思索第选择合适的知识点解决问题。 这样,你的技术实力就可以再上一个台阶。 本文作者: java乐园 本文来自云栖社区合作伙伴“JAVA乐园”,了解相关信息可以关注“JAVA乐园”

优秀的个人博客,低调大师

开发笔记3 | Java 代码规约第 2 条

返回规约清单列表 规约类型:编程规约 - 命名风格 规约级别:强制 规约描述:代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式,也要避免采用。 正例: alibaba / taobao / youku / hangzhou 等国际通用的名称, 可视同英文 反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 1、如果某些变量的英文是比较冷僻的单词,也要使用英文来进行命名,同时,可以对这个变量进行一些啰嗦的注释,以便阅读代码的人能够结合注释看明白该变量; 延伸阅读:15 Best Practices of Variable & Method Naming 说明:内容摘自《阿

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册