Android
文章平均质量分 78
AlanWang4523
这个作者很懒,什么都没留下…
展开
-
adb 命令拷贝文件到安装包内置目录
【代码】adb 命令拷贝文件到安装包内置目录。原创 2023-07-19 11:47:37 · 2172 阅读 · 0 评论 -
ijkplayer 源码分析(2):消息分发处理机制
ijkplayer 源码详解,源码剖析,详细梳理了 ijkplayer 的消息机制,消息分发处理流程。原创 2023-03-29 21:34:37 · 531 阅读 · 0 评论 -
ijkplayer 源码分析(1):初始化流程
ijkplayer 源码分析,梳理 ijkplayer 动态库加载及初始化路程原创 2023-03-29 10:27:02 · 815 阅读 · 0 评论 -
ijkplayer Android 端简要使用流程
ijkplayer Android 端的简单使用流程及接口说明原创 2023-03-24 18:43:31 · 5218 阅读 · 0 评论 -
实现基于 CMake 编译调试 ijkplayer (ijk0.8.8--ffmpeg4.0)
实现基于 CMake 编译 ijkplayer,可以在 AndroidStudio 中查找、跳转、运行、调试 ijkplayer 源码,项目已开源并上传至 Github原创 2023-03-23 21:24:33 · 1110 阅读 · 3 评论 -
移动端开源播放器对比与选型(ExoPlayer/ijkplayer/VLC/GStreamer/SmarterPlayer)
移动端开源播放器调研和选型,分别介绍了 ExoPlayer、ijkplayer、VLC、GStreamer、SmartPlayer 等开源播放或 SDK 及各自的优缺点原创 2023-03-21 15:35:32 · 12474 阅读 · 0 评论 -
Assimp 裁剪编译 Android 库
通过编译配置选项裁剪编译,只编自己需要的部分,如本文:Exporter 全不需要,Importer 只编进来 Obj 和 FBX 格式。配置选项说明:-DBUILD_SHARED_LIBS=OFF 关掉动态库,即编译静态库-DASSIMP_NO_EXPORT=ON 关闭所有的 Exporter(不需要导出模型)-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=FALSE 关闭编译所有的默认 Importer,即不全部编译-DASSIMP_BUILD_OBJ_IMP原创 2022-01-12 21:11:05 · 2539 阅读 · 0 评论 -
Android 任务执行器(异步串行/异步并行/UIThread)
Android 日常使用中经常会用到异步任务执行,以及有时需要在 UIThread 执行一些 UI 操作。执行异步任务也可以使用 Android 自带的 AsyncTask,但避免与其他应用或其他业务竞争资源,最好可以自己维护一个异步任务管理器。执行一些 UI 操作如果是在 Activity 或 Fragment 中倒是方便,但有时如果不在且需要 Toast 一些提示就不方便,因此封装了一个自定义的 TaskExcutor,提供以下方法: /** * 在【默认线程池】【串行执行】异步任务原创 2020-11-23 21:47:45 · 997 阅读 · 0 评论 -
Android AudioTrack 播放封装及测试
Android 音频录音/播放系列:《Android AudioRecord 录音封装及测试》对 Android AudioTrack 封装,内部管理播放状态,并在暂停播放时做 FadeOut,在恢复播放时做 FadeIn ,避免快速暂停/恢复的播放杂音问题。并设计成回调的拉模式,通过回调向外层要播放的数据。AudioPlayer 封装如下:import android.media.AudioFormat;import android.media.AudioManager;import and原创 2020-11-23 21:33:28 · 1020 阅读 · 0 评论 -
以元素数量为依据的 LRUHashMap
一般 LRU(Least Recently Used) 是以容量大小为准,但有时我们需要以元素数量为准来做 ,实现方式如下:import java.util.HashMap;import java.util.LinkedHashMap;import androidx.annotation.Nullable;/** * 参考 LRU 算法实现的 LinkedHashMap,但是以 put 为准,内部维护一个双向链表, * 最新 put 的元素在队尾,最旧 put 的元素在队头,当 put 一个元原创 2020-11-23 12:54:56 · 165 阅读 · 0 评论 -
Android AudioRecord 录音封装及测试
对 AudioRecord 封装,内部管理录音状态,并读取数据到 ByteBuffer 通知外层获取录音数据。AudioRecord 封装代码如下:import android.media.AudioFormat;import android.media.AudioRecord;import android.media.MediaRecorder;import com.alan.audioio.audio.common.IDataAvailableListener;import com.alan原创 2020-11-20 19:32:18 · 853 阅读 · 0 评论 -
Android Audio Wav 文件读写操作的封装
Android 在使用 AudioRecord 录音时,采集的是 PCM 数据,有时候在录完后向听下录音效果,还需要拉到电脑端用 AU 播放,手机端没法直接播放 PCM 数据。因此封装了一个 WavFile 在 PCM 前面增加 Wav 头,生成 wav 文件,可以在手机上直接播放。文件头信息见使用方法如下:String wavSavePath = "/sdcard/Alan/audio/record.wav"; // 指定 PCM 格式(跟 AudioRecord 配置一致),原创 2020-10-28 21:33:20 · 3353 阅读 · 0 评论 -
Android FFmpeg 编译可执行命令程序(依赖动态库)
项目中有两种情况用到 FFmpeg :C++ 底层代码调用 FFmpeg 用于音视频解码Android 上层使用 FFmpeg 命令行工具用于音视频裁剪、分离、加水印等一般用法是编译一份 FFmpeg 静态库或动态库(大小 4M+)用于底层依赖和调用,再编译一份 ffmpeg 可执行程序(大小 4M+),但这样实际上项目中有两份 ffmpeg 核心库,会增加安装包体积。因此优化如下:编译一份 libffmepg.so 用于底层代码依赖和调用(大小 4M+);将 ffmpeg.c 等代码依赖原创 2020-07-15 12:09:33 · 858 阅读 · 1 评论 -
Android JNI 编程之动态注册(设置返回 long float double 型数据)
jni静态注册和 jni动态注册,jni返回double型数据, jni返回float型数据,jni返回long型数据,jni返回java对象,jni返回传递对象静态注册理解和使用方式简单, 使用相关工具按流程操作就行, 编码出错率低JNI 层函数名特别长,且当需要更改类名,包名或者方法时, 需要按照之前方法重新生成头文件, 灵活性不高初次调用 native 函数时要根据函数...原创 2019-05-18 21:14:58 · 1036 阅读 · 1 评论 -
Android 使用 mp4parser 做视频拼接合并
做短视频拍摄时,在分段录制结束需要将多个视频片段拼接成一个视频文件,然后进入预览界面播放。有两种方案:方案一:使用 FFMpeg 进行视频拼接,命令如下:// inputListFilePath 为需要合并的文件列表文件,每行一个文件路径String cmd = "ffmpeg -y -f concat -safe 0 -i " + inputListFilePath + " -c co...原创 2019-04-16 01:07:07 · 4580 阅读 · 1 评论 -
Android 使用 mp4parser 做视频裁剪
做音视频时我们很多时候需要做音视频裁剪,本文介绍使用开源库 [mp4parser](https://github.com/sannies/mp4parser) 做裁剪。使用时先在 gradle 中配置依赖:compile 'com.googlecode.mp4parser:isoparser:1.1.21'将 mp4parser 封装成音视频裁剪工具类:import android.t...原创 2018-11-20 20:59:47 · 5373 阅读 · 1 评论 -
gradle 配置生成不同 ABI 版本及不同名字的 APK
def releaseTime() { return new Date().format("yyyy-MM-dd-HH-mm")}import com.android.build.OutputFileandroid { ... splits { abi { enable true reset() ...原创 2018-10-19 16:34:14 · 3406 阅读 · 0 评论 -
FileDownLoader https 无法下载问题(SSLHandshakeException)
1、问题:项目下载改为 https 协议,连接代理后使用 liulishuo 的 FileDownLoader 无法下载,抛出异常如下:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not fou...原创 2018-08-30 20:31:12 · 4653 阅读 · 2 评论 -
编程技巧之用 do{}while(false) 进行多错误处理
编程中我们经常会遇到这样的问题,一个函数中有很多处理逻辑,每个步骤都有可能出错,对于出错的要做相同的错误处理,错误出口很多。那么通常我们怎么处理呢?一般有两种处理方式:if else 多层嵌套如下,可以看到这种处理嵌套逻辑特别深void function() { if(a != null) { if(b() == true) { if(c() == ...原创 2018-06-30 15:47:01 · 927 阅读 · 0 评论 -
Android 设置Wifi热点、打开与关闭的监听
监听手机打开与关闭wifi便携式热点原创 2015-06-14 23:43:36 · 15310 阅读 · 6 评论 -
友盟社会化分享 ### 微信发送被拒绝 微信与朋友圈点击无响应
1.微信分享不成功的原因:(来自友盟论坛)(1):应用是否通过审核。android平台必须要通过审核后才可以使用。(2):确认AppId是否填写正确。(3):是否是导出带签名的apk文件,ran然后再安装运行。(4):包名是否申请应用填写的包名一致。(5):签名问题。检查签名是否一致,请按照以下步骤检查: 1>:在命令行运行以下命令:原创 2015-09-18 11:17:11 · 1884 阅读 · 0 评论 -
Android Studio导致的假死机问题的解决
问题描述:Android Studio启动运行时或rebuild时导致系统假死,只有鼠标能动,点击任何界面都没有反应,浏览器都没法点,都没法查,Alt+shift+delete都不好使无法调出资源管理器,开始菜单都无法调出来,也就无法关机,最后只能长按电源键强制断电关机,N多次都这样,无语了。最后每次开机先不启动AS(Android Studio),先查好解决办法再打开测试,看是否解决,最原创 2016-04-16 17:24:46 · 7347 阅读 · 0 评论 -
Android OpenGL ES2.0编程教程系列之总览
原文链接翻译 2016-05-28 15:32:32 · 946 阅读 · 0 评论 -
Android OpenGL ES2.0编程教程系列之创建OpenGL ES环境(一)
原文链接为了用OpenGL在你的Android应用上绘制图形,你必须为它们创建一个视图容器。创建视图容器更直接的方式之一是继承GLSurfaceView 和 GLSurfaceView.Renderer。GLSurfaceView 是一个用OpenGL做图形绘制的视图容器,GLSurfaceView.Renderer用来控制在视图画什么。想了解更多关于这些类的信息,请看OpenGL开发者指导。翻译 2016-05-28 17:34:41 · 2276 阅读 · 0 评论 -
Android OpenGL ES2.0编程教程系列之定义形状(二)
原文链接能够定义用于在一个OpenGL ES view的上下文环境中绘制的图形,是你创建高端图形杰作的第一步。如果不知道一些关于OpenGL ES期待你如何定义图形对象的基本知识,用OpenGL ES绘图会有点棘手。本节内容说明了相对于Android屏幕的OpenGL ES坐标系统、定义形状的基本知识、形状的面以及定义三角形和正方形。定义一个三角形OpenGL ES允许你使用三维空翻译 2016-05-28 22:26:06 · 1117 阅读 · 0 评论 -
Android OpenGL ES2.0编程教程系列之绘制图形(三)
原文链接定义好想要用OpenGL绘制的图形后,你大概想要画它们了。绘制形状可能需要比你想象的更多的代码,因为API提供了在图形渲染管线上的大量的控制。本节内容讲解如何使用OpenGL ES 2.0 API来绘制你在上节内容中定义的形状。初始化形状在任何绘制之前,你都必须初始化和加载你计划绘制的图形。除非你在程序中使用的形状的结构(原始坐标)是在程序执行过程中改变的,你应该在你的渲染翻译 2016-05-28 23:51:21 · 1994 阅读 · 0 评论 -
Android OpenGL ES2.0编程教程系列之投影和相机视图的应用(四)
原文链接OpenGL ES环境允许你以更接近于你眼睛看到的物理对象的方式来显示你绘制的对象。物理查看的模拟是通过对你所绘制的对象的坐标进行数学变换完成的:Projection — 这个变换是基于他们所显示的GLSurfaceView的宽和高来调整绘制对象的坐标的。没有这个计算变换,通过OpenGL绘制的形状会在不同显示窗口变形。这个投影变化通常只会在OpenGL view的比例被确翻译 2016-05-29 14:34:57 · 1780 阅读 · 1 评论 -
Android OpenGL ES2.0编程教程系列之添加运动(五)
原文链接在屏幕上绘制图形只是OpenGL的相当基础的特点,你也可以用其他的Android图形框架类来实现这些,包括Canvas和Drawable对象。OpenGL ES为在三维空间中移动和变换提供了额外的功能,并提供了创建引人注目的用户体验的独特方式。在本次课程中,你将进一步使用OpenGL ES学习怎样为你的图形添加一个旋转动作。旋转一个图形用OpenGL ES 2.0来旋转一个翻译 2016-05-29 15:10:33 · 859 阅读 · 0 评论 -
Android OpenGL ES2.0编程教程系列之响应触摸事件(六)
原文链接像旋转三角形一样,通过预设程序来让对象移动对于吸引注意是很有用的,但是如果你想让你的OpenGL图形有用户交互呢?让你的OpenGL ES应用有触摸交互的关键是,扩展你的GLSurfaceView的实现重载onTouchEvent()方法来监听触摸事件。本节内容将向你展示如何监听触摸事件来让用户旋转一个图形。设置触摸事件为了你的OpenGL ES应用能够响应触摸事件,你必须翻译 2016-05-29 15:46:36 · 1197 阅读 · 0 评论 -
Audio WAV文件头格式
WAV文件头格式含义、代码生成WAV文件头及修改更新WAV文件头原创 2017-03-02 10:46:55 · 7868 阅读 · 1 评论 -
JNI 传递和返回基本参数
Java 中的基本类型包括 boolean,byte,char,short,int,long,float,double 这样几种,本文主要介绍上层向底层传递基本类型数据,以及底层向上层返回基本数据类型的情况。jni静态注册,jni动态注册,jni返回double型数据, jni返回float型数据,jni返回long型数据,jni返回java对象,jni返回传递对象原创 2018-03-31 08:07:13 · 10094 阅读 · 1 评论 -
java.util.concurrent.ExecutionException
java.util.concurrent.ExecutionException在向项目中添加 .9 图片资源时编译出错,报出如下异常:FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:mergeProductDebugResources'.> Error...原创 2018-05-04 15:17:32 · 11188 阅读 · 1 评论 -
Android 拦截音量键,控制系统媒体音量
在上一篇文章中介绍过,在做 SAPA 适配时由于其直连驱动层不经过 Android 的音量增益控制,所以调节系统媒体音量对音量改变无效。如果没有音乐在放的时候,按调节音量的键,默认调节的是铃声的音量,所以在使用 SAPA 播放音频时,因为不经过 Android 层,系统认为没有音乐播放,在按音量键时调节的是铃声音量无法控制播放音量。思路:调用系统 API 强制设置为控制媒体音量截获物理音量键的按键...原创 2018-06-06 09:19:55 · 7674 阅读 · 0 评论 -
Android 监听系统媒体音量变化
在做 SAPA 适配时由于其直连驱动层不经过 Android 的音量增益控制,所以调节系统媒体音量对音量改变无效。现要调节系统音量时也可以控制播放的音量,那么就需要监听系统音量变化,然后转换成增益给输出数据乘以对应比率从而实现对音量的控制。一般监听音量多是监听手机物理音量按键的点击事件,但是在音量控制面板拖动音量条改变音量就无法监听。那么我们需要分析无论是按音量键还是拖动音量条,系统都做了什么呢?...原创 2018-05-31 20:10:29 · 21016 阅读 · 10 评论 -
Android 手机sdcard目录或文件的拷贝、移动、删除(递归)
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;/** * * @ClassName: FileOperator * @Description:原创 2014-09-25 19:04:47 · 6701 阅读 · 1 评论