Android进阶之路
文章平均质量分 66
小码哥_WS
这个作者很懒,什么都没留下…
展开
-
国际化开发 - 时区知识
时区概念:时区是地球上具有统一的法定标准时间的区域。由于区域的法律定义可能千差万别且经常更改,因此通常需要数据库或查找表才能正确应用时区规则。时区数据库目前通常使用两种不同的时区数据库:1.Microsoft Windows时区数据库由Microsoft维护在Windows平台实现。Windows API获取本机时区key示例: "China Standard Time"2.IANA /奥尔森时区数据库也称为ZoneInfo,TZDB或TZ数据库,国际标准时区在Linux,Ma原创 2020-07-09 16:57:15 · 1022 阅读 · 0 评论 -
Android 音频系统播放延迟时间获取(latency)
1.系统AudioManager类里面有一个隐藏接口:可以用反射获取到系统播放硬件延迟 AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); Method m = am.getClass().getMethod("getOutputLate...原创 2020-03-16 16:22:30 · 4454 阅读 · 1 评论 -
JNI高阶知识总结
JNI与NDK的关系NDK可以为我们生成了C/C++的动态链接库,JNI是java和C/C++沟通的接口,两者与android没有半毛钱关系,只因为安卓是java程序语言开发,然后通过JNI又能与C/C++沟通,所以我们可以使用NDK+JNI来实现“Java+C”的开发方式。JNIEnv与JavaVMJNIEnv 概念 : 是一个线程相关的结构体, 该结构体代表了 Java 在本线程的运行环境 ;原创 2017-05-08 12:24:31 · 2195 阅读 · 0 评论 -
openGL ES进阶教程(三)用openGL实现动态壁纸,就是这么简单
网上动态壁纸的实现教程有很多,但是用openGL实现动态壁纸的教程却是寥寥无几,那么今天就带领大家学习用openGL实现动态壁纸,起一个抛砖引玉吧。在之前曾写过一篇 ffmpeg/camera实现最近很火的视频壁纸,相机壁纸 ,动态壁纸的实现套路已经写了,今天就不追述了。老规矩,先看效果图让大家有个概念:大家也看出来了,没错,是基于上篇openGL ES进阶教程(二)之全景图片 实现的。下面就具体说原创 2017-05-24 20:18:57 · 3981 阅读 · 2 评论 -
Android Multimedia实战(五)MediaCodec编码解码实例解析
MediaCodec概述MediaCodec是一个Android原生的编解码器。 简单的来说,MediaCodec可以把摄像头采集的数据流编码为H264格式,这个过程是压缩过程。也可以把H264格式解码在surface类的控件上显示。我们先来看一下Android系统中解码器的命名,软解码器通常是以OMX.google开头的。硬解码器通常是以OMX.[hardware_vendor]开头的,比如TI原创 2017-04-28 12:00:46 · 4742 阅读 · 1 评论 -
Android Multimedia实战(四)MediaProjection实现截图,与MediaMuxer实现录屏为MP4,Gif格式
MediaProjection可以用来捕捉屏幕,具体来说可以截取当前屏幕和录制屏幕视频 (5.0以上)先总结下系统是如何实现组合键截屏的: 都应该知道Android源码中对按键的捕获位于文件PhoneWindowManager.java中 当满足按键条件时会用一个mHandler 开始post一个runnable,进入这个runnable中执行takeScreenshot()方法。使用AIDL原创 2017-04-27 15:15:43 · 8612 阅读 · 1 评论 -
ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能
上一篇我们实现了Android平台解码avi并用SurfaceView播放。 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示 本篇我们在此基础上实现滤镜,水印等功能。对ffmpeg不熟的客官看这里:ffmpeg源码简析(一)结构总览 先上两张效果图: 黑白:const char *filters_descr = “lutyuv=’u=128:v=12原创 2017-05-11 11:52:35 · 5148 阅读 · 4 评论 -
ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示
在上一篇文章中实现了Android平台MP4解码YUV数据, 本篇我们实现Android平台解码avi并用SurfaceView播放。先上图看效果:思路: 1.把封装好的视频数据解码为YUV 2.YUV数据转化为RGB。 3.一帧一帧的传给SurfaceView显示出来PS: 其实YUV数据可直接在SurfaceView显示,在研究Android系统多媒体框架的stagefright视频显原创 2017-05-10 09:30:58 · 4741 阅读 · 5 评论 -
悬窗播放视频,让你聊天看视频两不误(下)
下面实现最小化悬窗,点击继续悬窗播放,拖动小火箭效果。 这部分代码借鉴了网上的小火箭效果 点击悬窗视频的一个按钮启动另一个server。展现小按钮图标。case R.id.iv_small: MyApplicaton.setValueProgress(valueProgress); onExit(); Intent原创 2017-03-02 16:09:35 · 3364 阅读 · 0 评论 -
悬窗播放视频,让你聊天看视频两不误(上)
当年的毕业设计拿出来记录一下,实现效果图如下:视频播放用的是vitamio框架。这里只讨论实现悬浮窗播放视频的思路1.点击视频播放器中的悬窗按钮,开启悬窗播放模式。这里启动了一个后台server。 先进入Home桌面,然后启动MediaPlaybackService Intent intent = new Intent(); intent.setAction(Int原创 2017-03-02 15:34:25 · 4918 阅读 · 1 评论 -
windows下编译最新版ffmpeg3.3-android,并通过CMake方式移植到Android studio2.3中
windows下编译最新版ffmpeg3.3win下编译: 1.下载安装MinGW:http://sourceforge.net/projects/mingw/files/ 2.下载yasm http://yasm.tortall.net/Download.html 3.下载 ffmpeg:https://www.ffmpeg.org/download.html 编辑ffmpeg文件夹下原创 2017-04-21 20:34:02 · 8529 阅读 · 25 评论 -
细数Android5.0到Android7.X 多媒体技术新特性
Android 5.0 行为变更媒体播放如果您要实现显示媒体播放状态或传输控件的通知,请考虑使用新的 Notification.MediaStyle 模板,而不是自定义 RemoteViews.RemoteView 对象。无论您选择使用哪个方法,请务必将通知的可见性设为 VISIBILITY_PUBLIC,以便可通过锁定屏幕访问您的控件。请注意,从 Android 5.0 开始,系统不再将 Remo原创 2017-04-28 16:23:26 · 4501 阅读 · 0 评论 -
android传感器
1 加速度传感器 TYPE_ACCELEROMETER 2 温度传感器 TYPE_AMBIENT_TEMPERATURE 3 陀螺仪传感器 TYPE_GYROSCOPE 4 光线传感器 TYPE_LIGHT 5 磁场传感器 TYPE_MAGNETIC_FIELD 6 压力传感器 TYPE_PRESSURE 7 临近传感器原创 2017-02-25 17:11:41 · 751 阅读 · 0 评论 -
ffmpeg实战教程(十)ffmpeg/camera实现最近很火的视频壁纸,相机壁纸
本篇实现一个有意思的玩意儿,视频壁纸,相机壁纸 这玩意好像现在还都是国外版本,哈哈先上图: 视频壁纸 相机壁纸 1.动态壁纸制作的知识:每一个动态壁纸都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象,实际上所有的绘图与刷新都是由engine完成。如下public class VideoLiveWallpaper exten原创 2017-05-16 10:19:50 · 6885 阅读 · 1 评论 -
openGL ES进阶教程(一)之粒子光束
2016AR/VR喊的火热,这些在Android上的实现或多或少与openGL 有关。OpenGL能做的事情太多了!很多程序也看起来异常复杂。更有可能因为某一步的顺序错误导致最后渲染出错,这是因为,OpenGL和我们现在使用的C++、java这种面向对象的语言不同,OpenGL中的大多数函数使用了一种基于状态的方法。你可以看到Android中的播放器原理,就是API改变播放状态,逻辑性非常强~本原创 2017-05-17 09:12:46 · 5512 阅读 · 1 评论 -
音频处理—SOX音效
音频处理目前软件开发中所做的音频处理主要包括:音频编解码3A(回声消除AEC,降噪ANC,增益AGC)混响,均衡器,压缩器等对于音频编解码,使用成熟的编解码开源库即可。对于3A算法,基本上借鉴webRTC上的3A算法扩展即可。但是对于混响,均衡器,压缩器等音效处理确是没有一种明确的处理方案,目前已知的比较靠谱的开源库就是(SOX,openAL)SOX介绍SOX:一款自称是音频处...原创 2019-09-27 10:37:14 · 7201 阅读 · 4 评论 -
Android 耳返实践 OpenSL ES AAudio Oboe
耳返概述:耳返主要实现监听的功能,在低延时的情况下可以给主播一个比较真实音频的反馈,在演唱会等专业场景里比较常用。技术实现上来说就是要时时的把录制进的音频数据立刻播放出去,当然这个过程要低延迟。AudioRecord,AudioTrack在Android系统上做耳返,实现一个高性能的音频录制音频播放是一件很痛苦的事;因为我们并不能直接使用系统的AudioRecord,AudioTrack。...原创 2019-02-27 19:39:49 · 6976 阅读 · 4 评论 -
Android——直播推流SDK
概述:好像有三个月没有更新博客了,年前实在是忙的累成狗啊。。。本想直播功能稳定了就没那么多事了,没想到又要搞魔法短视频功能,马丹,短视频玩成了花啊,撸起袖子干。 现在把我们项目中的直播SDK开源出来,我们是境外直播平台,百万用户,经过半年迭代,SDK已经相当稳定,大家可以放心使用。https://github.com/WangShuo1143368701/WSLiveDemo 这个sdk是...原创 2018-02-27 19:00:32 · 32625 阅读 · 32 评论 -
Android消息传递机制总结
由于直播项目的推流SDK,拉流SDK已经稳定。所以这段时间一直开发业务层新需求。业务层的核心灵魂就是层层的消息传递,今天就来总结一下andorid的应用层的各种消息传递。1.线程间通讯 ——— Handler,HandlerThread等。 2.组件间通信 ——— BroadcastReceiver,接口回调等。 3. 第三方通信 ——— EventBus,rxBus 4.进程间通原创 2017-11-23 15:43:38 · 1730 阅读 · 0 评论 -
openGL ES进阶教程(六)美颜滤镜之美白,磨皮,红润
网上搜罗了一堆的美颜滤镜效果,可惜尽不如人意。最后偶然看到ios上提供了一个用OC写的美颜滤镜,好吧,改写成Java的试试。好在大学时期搞过一段时间IOS开发,用自己的半吊子的水平,没想到还真改成功了。先上效果图:网上搜涨痘痘的图片,搜到刘涛了,罪过罪过~原图:美颜后:可见有四个可滑动的bar,从上到下分别是,磨皮度,磨皮值,美白,红润。美颜原理磨皮:本质就是让像素点模糊,可以使用高斯模糊,但是可能原创 2017-09-01 20:17:12 · 18792 阅读 · 9 评论 -
openGL ES进阶教程(五)制作一个简单的VR播放器,播放全景视频
之前写过全景(VR)图片,和用openGL ES+MediaPlayer 渲染播放视频+滤镜效果这一篇就在之前的基础上实现一个最简单的VR播放器,播放全景视频。概述:全景视频是一种用3D摄像机进行全方位360度进行拍摄的视频,用户在观看视频的时候,可以随意调节视频上下左右进行观看。展示:“身临其境的枪战” 可见晃动手机,视图也跟着转! 原理:1.用OpenGL绘制一个球。 2.MediaPl原创 2017-08-01 20:44:51 · 7930 阅读 · 5 评论 -
openGL ES进阶教程(四)用openGL ES+MediaPlayer 渲染播放视频+滤镜效果
之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频 ,今天再给大家来一篇openGL ES+MediaPlayer来播放视频。。。。当年也曾呆过camera开发组近一年时间,可惜那时候没写博客的意识,没能给自己给大家留下多少干货分享。。。上个效果图吧:用openGL着色器实现黑白(灰度图)效果原创 2017-05-27 09:50:55 · 9521 阅读 · 7 评论 -
ffmpeg实战教程(十二)为视频添加/更换背景音乐
2017年,各种关于视频处理的功能层出不穷,现在基本上大多APP都有视频上传播放功能。 然而上传,播放可用的优秀框架有很多,我们在此就不说了。 本篇我们就做一个用ffmpeg给视频添加/更换背景音乐的功能UI界面有两个输入框,第一个填入要加背景音乐的视频文件,第一个要添加音乐的文件。 然后点击按钮。 可见在手机根目录生成了一个合成的视频文件。试播一下,发现已经有了背景音乐。 其实现原理主要是原创 2017-05-22 17:59:14 · 11393 阅读 · 11 评论 -
ffmpeg实战教程(十一)手把手教你实现直播功能,不依赖第三方SDK
直播,2016最火的技术之一了,更多的关于直播的知识:http://blog.csdn.net/king1425/article/details/72489272 …这篇我们就不依赖任何集成好的SDK,自己搭建服务器,用ffmpeg+nginx实现手机直播功能先上图:推流的手机拉流的网页和VL播放器拉流的手机客户端对于nginx服务器的搭建之前有写过:ffmpeg实战教程(九)windows下ff原创 2017-05-19 20:24:01 · 18741 阅读 · 9 评论 -
openGL ES进阶教程(二)之全景图片
全景又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体最大的区别是“可操作,可交互”。 全景分为虚拟现实和3D实景两种。虚拟现实是利用maya等软件,制作出来的模拟现实的场景,代表有虚拟紫禁城等;3D实景是利用单反相机或街景车拍摄实景照片,经过特殊的拼合,处理,让作者立于画境中,让最美的一面展现出来。全景顾名思义就是给人以三维立体感觉的实景360度全方位图像~ 此图像最大原创 2017-05-17 20:13:27 · 6687 阅读 · 1 评论 -
ArrayUtils,ListUtils,MapUtils,ObjectUtils,SystemUtils
ArrayUtils数组工具类,可用于数组常用操作,如: isEmpty(V[] sourceArray) 判断数组是否为空或长度为0 getLast(V[] sourceArray, V value, V defaultValue, boolean isCircle) 得到数组中某个元素前一个元素,isCircle表示是否循环 getNext(原创 2016-11-05 09:42:52 · 2309 阅读 · 0 评论 -
Android工具类之StringUtils,RandomUtils,SerializeUtils,JSONUtils
String工具类,可用于常见字符串操作,如: isEmpty(String str) 判断字符串是否为空或长度为0 isBlank(String str) 判断字符串是否为空或长度为0 或由空格组成 utf8Encode(String str) 以utf-8格式编码 capitalizeFirstLetter(String s原创 2016-11-05 09:33:42 · 1357 阅读 · 0 评论 -
Android material design(下)
CardView是实现卡片式布局效果的重要控件,和CoordinatorLayout一样也是一个特殊的FrameLayoutCardView_cardBackgroundColor 设置背景色CardView_cardCornerRadius 设置圆角大小CardView_cardElevation 设置z轴阴影CardView_cardMaxElevati原创 2017-02-27 15:21:14 · 780 阅读 · 0 评论 -
Android material design(上)
Material Design,中文名:材料设计语言,是由Google推出的全新的设计语言,谷歌表示,这种设计语言旨在为手机、平板电脑、台式机和“其他平台”提供更一致、更广泛的“外观和感觉”。 回顾上篇demo:http://blog.csdn.net/king1425/article/details/53445455android.support.design.widget.TextInputL原创 2017-02-27 14:45:51 · 560 阅读 · 0 评论 -
关于 Android中的插件化开发,dex分包,热修复(Tinker)的思考(二)
插件化开发的主要原理就是动态加载技术。上文已经对动态加载DexClassLoader进行了解析今天要讲的是动态加载技术的亲戚 —— MultiDex。他们的核心原理之一都是dex文件的加载。先来理解概念 MultiDexMultiDex是Google为了解决“65535方法数超标”以及“INSTA原创 2017-03-17 18:01:57 · 2279 阅读 · 0 评论 -
关于 Android中的插件化开发,dex分包,热修复(Tinker)的思考(一)
插件化开发优点: 一. 来可以将自己的应用分拆,某些功能可以在插件中实现,用到时再进行下载,而且不用安装. 如果有新功能的添加,不需要更新应用,只要预留插件管理,我们就可以通过添加插件的方式,动态更新自己的应用,该功能需要改进或扩展,更新插件即可,无需频繁安装或卸载(容易造成用户反感).二. 对应同系应用,正常的引流方式只能引导用户进行新应用的下载和安装,如果使用插件化原创 2017-03-17 16:56:11 · 1112 阅读 · 0 评论 -
Android 5.X之Ripple,Palette的详解
Android 5.x 提供了视图的水波纹效果, RippleDrawable 实现。RippleDrawable特性: 自定义触摸反馈动画 以波纹效果来显示状态变化的 Drawable ripple 标签即对应一个 RippleDrawable使用:在V21中新建XML文件:<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:andr原创 2017-03-03 12:17:33 · 933 阅读 · 0 评论 -
android权限请求
import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Build;import android.os.Bundle;import androi原创 2016-12-14 15:02:35 · 1074 阅读 · 1 评论 -
TabLayout与ViewPager组合
import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.View原创 2016-12-03 16:30:34 · 495 阅读 · 0 评论 -
android之DesignSupport
上图: import android.os.Bundle;import android.support.design.widget.CollapsingToolbarLayout;import android.support.design.widget.CoordinatorLayout;import android.support.design.widget.FloatingActionB原创 2016-12-03 16:21:06 · 524 阅读 · 0 评论 -
Android之微信图片加载
MainActivityimport java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.List;import ja原创 2016-11-05 17:03:57 · 1119 阅读 · 0 评论 -
RecyclerView使用Dome
很好理解,套用即可import com.example.recyclerview.SimpleAdapter.OnItemClickListener;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.widget.Default原创 2016-11-05 15:27:22 · 692 阅读 · 0 评论 -
Android viewpagerfragment,FragmentPagerAdapter使用demo
demo来自慕课网activity_main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" androi原创 2016-10-31 21:02:18 · 531 阅读 · 0 评论 -
Android NestedScrolling,NestedScrollingParent,NestedScrollingParentHelper解析
在这之前,我们知道Android对Touch事件的分发是有自己一套机制的。主要是有是三个函数:dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent。这种分发机制有一个漏洞:如果子view获得处理touch事件机会的时候,父view就再也没有机会去处理这个touch事件了,直到下一次手指再按下。事件分发是这样的:子View首先得到事件处理权,处理原创 2017-03-13 12:24:37 · 3611 阅读 · 1 评论 -
Android Behavior详解
Behavior是Android新出的Design库里新增的布局概念。Behavior只有是CoordinatorLayout的直接子View才有意义。可以为任何View添加一个Behavior。 Behavior是一系列回调。让你有机会以非侵入的为View添加动态的依赖布局,和处理父布局(CoordinatorLayout)滑动手势的机会。如果我们想实现控件之间任意的交互效果,完全可以通过自定义原创 2017-03-13 18:24:37 · 12360 阅读 · 0 评论