安卓
文章平均质量分 82
bberdong
专攻音视频方向
展开
-
Android MediaCodec message机制分析
注释中也写明白了,AHierarchicalStateMachine实现消息处理,因为AHierarchicalStateMachine是ACodec的父类,所以子类没实现的方法,就调用父类的。在ALooper中没有发现gLooperRoster的使用,它是一个全局变量。也就是说ACodec调用完setID方法之后,首先它获得了一个唯一生成的id,其次ACodec的mLooper对象被赋值为mCodecLooper。这样的话,很巧妙的,每次调用完changeState,发出去的消息就会发给不同的类了!原创 2022-09-16 14:30:07 · 1083 阅读 · 0 评论 -
miracast uibc详解
用户输入反向控制通道(UIBC)是一个可选的WFD特性,实现该扩展功能,有助于用户从WFD sink端控制WFD source端的通信。wifi display spec文档定义:HIDC user inputs are formatted using the HIDC Input Body. 翻译一下4.11 UIBC UIBC是WFD的可选feature,便于用户在UI上用户交流?展现在sink端,到source端?什么鬼!原创 2022-08-19 14:37:27 · 3045 阅读 · 1 评论 -
miracast技术详解
特殊情况下,由于要投射的内容是手机决定的,所以如果手机侧的miracast不想投某些画面的时候,两侧显示的会有区别,比如说密码输入界面,版权保护的界面,锁屏之后的界面等。请注意,这些接口很多都是无法让第三方APP访问的,所以做这些的前提是整个系统的源码是开放的,这样你才可以给你的 apk 添加系统签名,在源码树中去编译,才能访问这些方法。很明显,会有更高的权限,因为自己是组长。到这一步,我们可以复习一下,整个miracast的架构了,下图是WFD官方的工作模块框图,基本和前面提到的内容是大体对应的。....原创 2022-08-18 11:02:23 · 10134 阅读 · 2 评论 -
Android audio不同设备输出不同音频研究(上)
目前Android平台,不同设备,输出相同音频是怎么做的比如说.Android平台接入新设备(3.5mm耳机插入,或者蓝牙耳机连接)之后status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t device, ...原创 2018-06-27 10:56:38 · 6885 阅读 · 0 评论 -
基于Android O平台Audio Focus分析(主要结合Car)(上)
基于Android O平台Audio Focus分析(主要结合Car)1.调用示例packages/apps/Car/LocalMediaPlayer/src/com/android/car/media/localmediaplayer/Player.javaprivate boolean requestAudioFocus(Runnable onSuccess) { int re...原创 2018-02-06 10:56:08 · 8326 阅读 · 1 评论 -
基于Android O平台Audio Focus分析(主要结合Car)(下)
Car相关经过一番查找,只有这个地方设置了mFocusListener,我们就拿Car来做研究吧packages/services/Car/service/src/com/android/car/CarAudioService.javapublic void init() { AudioPolicy.Builder builder = new AudioPolicy.Builder(mC...原创 2018-02-06 10:58:11 · 3380 阅读 · 0 评论 -
从CarAudioManager调用流程开始学习Vendor Interface(Service部分)
接下来就是Vendor的实现了!如果要作为一个Service来提供,我们应该怎么设计呢?TODO:QA:怎么设计比较合理。首先,在Android 系统启动的时候init进程/system/core/initmain@init.cppint main(int argc, char** argv) { ... parser.ParseConfig("/init原创 2018-01-15 13:45:55 · 4718 阅读 · 1 评论 -
从CarAudioManager调用流程开始学习Vendor Interface(Client部分)
1.需求解决系统升级困难的问题(模块化)a.以前用.h头文件的形式,各自Vendor有各自的so去实现硬件功能。现在改成.hal文件的形式(Binder化),类似.aidl.Thegoal of HIDL is that the framework can be replaced without having torebuild HALs. HALs will be built b原创 2017-10-26 18:06:56 · 4009 阅读 · 2 评论 -
Android Location开关过程分析
Android Location开关过程分析有同事发现目前车机的location位置在刷机(线刷之后),每次的location初始值(在settings中看见的)都不一致.之前对这个是一点都没接触过,所以今天拿出来研究下,凑一篇博客.location的三种工作模式?从settings->location界面来看,location主要有三种工作模式:high_accuracy battery_savi原创 2017-12-28 13:36:19 · 6260 阅读 · 0 评论 -
Android InputFlinger简单分析(主要分析Touch)
Android InputFlinger简单分析(主要分析Touch)首先,它有个服务,InputManagerService.InputManagerService启动startOtherServices@SystemServer...inputManager = new InputManagerService(context);wm = WindowManagerService.main(c原创 2017-11-24 16:59:38 · 6055 阅读 · 0 评论 -
Android O(8.0)音频write数据流程变化(HIDL)
简单回顾下,Audio write数据流程, AudioTrack->write AudioFlinger::PlaybackThread::threadLoop_write() mNormalSink->write 而mNormalSink其实是NBAIO_Sink,实现类是:AudioStreamOutSink 那我们直接看 frameworks/av/media/li...原创 2017-10-25 21:06:53 · 9856 阅读 · 2 评论 -
#Android N Ringtone总结
10月份什么都没写,怪不好意思的,今天赶紧补上一篇。这博客我是先在haroopad(ubantu)上写完之后才贴到CSDN的markDown编辑器里的。效果非常棒,推荐1.出厂默认铃声设置:vendor/xiaomi(huawei and so on)/ config/common_full_phone.mk# Default ringtonePRODUCT_PROPERTY_...原创 2016-11-02 17:15:39 · 4210 阅读 · 0 评论 -
Audio知识总结(Android)
人的耳朵能够听到的范围,是20Hz到20000Hz.就是指物体每秒中振动20-20000次。PCM16LE双声道数据中左声道和右声道的采样值是间隔存储的。每个采样值占用2Byte空间。采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH),而对于双声道立...原创 2017-05-16 11:01:21 · 2548 阅读 · 0 评论 -
Android O Audio libaudiohal模块分析
Android O Audio模块,多了一个libaudiohal文件夹:Android.mk DeviceHalLocal.h DevicesFactoryHalLocal.h EffectHalHidl.h EffectsFactoryHalLocal.h StreamHalLocal.cppConversio...原创 2018-03-07 15:43:40 · 6343 阅读 · 1 评论 -
Android O配置audio_policy
Android 7.0之前一直是用device/<company>/<device>/audio/audio_policy.conf这个文件来描述音频设备.audio_policy_conf.h中定义了audio_policy.conf路径.AudioPolicyManager.cpp:40: #include "audio_policy_conf.h"AudioPolic...原创 2018-04-12 11:09:05 · 3538 阅读 · 0 评论 -
Android audio 输出设备选择过程分析(上)
众(搞音频的(此处应该有个笑哭的表情)所周知的,要播放一个声音,创建AudioTrack之后,set函数设置参数的时候,会调用createTrack_l函数。第一步:获取outputcreateTrack_l用binder去调用AudioFlinger的createTrack创建AudioFlinger::Track之前,首先会去调用getOutputForAttr:...原创 2018-05-28 16:50:09 · 29578 阅读 · 10 评论 -
给Android车载蓝牙音乐添加盘控控制功能
1. 方向盘事件转换假设方向盘是通过lin总线转换的,最终来到安卓侧就是标准的keyevent:/** Key code constant: Play/Pause media key. */public static final int KEYCODE_MEDIA_PLAY_PAUSE= 85;/** Key code constant: Stop media key. */ ...原创 2019-03-09 19:43:23 · 4868 阅读 · 8 评论 -
Android录音的几个过程控制
1.如何监控其他app的录音行为? 经过一番查找,发现了这个API:android.media.AudioManager.AudioRecordingCallback使用方式,大体是这样:mAudioManger = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); mRecordingCal...原创 2019-01-04 10:47:17 · 5939 阅读 · 11 评论 -
Android FM录音功能
最近有个需求,FM需要做听歌识曲,然后我就发现,Andoid原生就提供了一个这个://MediaRecorder.java/*** Audio source for capturing broadcast radio tuner output.* @hide*/@SystemApipublic static final int RADIO_TUNER = 1998; 那我就要试...原创 2018-12-05 10:11:48 · 2553 阅读 · 0 评论 -
Android多声道录音研究
原生Android只支持2 channel的录音。可是偏偏会有多mic的需求,比如说语音识别。目前已知TDM协议可以将多mic数据从kernel送到hal,从内核空间搬运到用户空间中。可是原生AudioRecord接口是完全不支持多channel录音数据的采集的,怎么修改,才能让原生进行支持呢?我们就从AudioRecord的构造函数开始往下研究。无论行不行,都要研究出个所以然来!我们如果写...原创 2018-11-30 21:36:34 · 9531 阅读 · 3 评论 -
Android中的PCM设备
Android上的应用一般都是通过AudioTrack类来播放音频,通过AudioRecord类来录制音频。AudioTrack类和AudioRecord类是Android Frameworks封装提供给应用使用的音频接口类。这些类经过层层的Binder、JNI等调用后会调用Audio HAL层提供的相关接口。这些接口实现了对音频设备、通路等一系列操作。就这样最终完成Android App和硬件...转载 2018-10-10 10:34:50 · 2090 阅读 · 0 评论 -
(没有最终结论)Android 为何无法将通话音量调到最低
捋一捋代码流程:上层流程之前有分析过,可以参考这个:https://blog.csdn.net/bberdong/article/details/51792319(抱歉,那时候写的太随意)咱们就从AudioPolicyManager::checkAndSetVolume说起:status_t AudioPolicyManager::checkAndSetVolume( a...原创 2018-10-16 10:04:59 · 3404 阅读 · 13 评论 -
蓝牙电话(hfp)与Android audio hal的关联
通话的时候,需要打开音频通路,音频设备(上下行都要)我们从这里开始:packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient// in Connected stateprivate void processAudioEvent(int state, BluetoothDevice device) { ... ...原创 2018-09-30 18:33:00 · 6814 阅读 · 2 评论 -
Android O 收音机学习研究(基于Car)
应用层Demo路径:packages/apps/Car/RadioBootupReceiver类监听了ACTION_BOOT_COMPLETED,然后在onReceive里启动了RadioService.CarRadioActivity作为主Activity,在onCreate里创建了mRadioController.收音机主界面有个RadioDrawer(收音机抽屉...原创 2018-08-20 09:38:05 · 9726 阅读 · 4 评论 -
Android audio 输出设备选择过程分析(下)
上篇的分析到audio_route,现在接个力,也算是7月的作业,再不交这个月就落下了。audio_route_apply_and_update_path分两个过程,从函数名字都能看出来,一个是apply,一个是updata:audio_route_apply_path/* Apply an audio route path by name */int audio_route_ap...原创 2018-07-25 21:27:26 · 12687 阅读 · 1 评论 -
用wifi连接adb
确保手机和PC在一个网段。1. 用USB线将手机和电脑连接起来 2. 然后在手机端执行 adb root 然后使用adb shell登录手机,执行下面的命令: setprop service.adb.tcp.port 5555 stop adbd && start adbd & 3. 然后在PC上面执行下面的命令 adb原创 2017-05-16 10:54:12 · 764 阅读 · 0 评论 -
Android Toast订制
1.首先,当然是要找到Toast的代码了:老规矩,framework/base底下find -name Toast.java即可。2.找到Toast界面显示的地方:真的也是蛮好找的,搜索inflate函数就找到了public static Toast makeText(Context context, CharSequence text, @Duration int duration) {原创 2017-05-02 16:40:59 · 879 阅读 · 1 评论 -
rom定制笔记(一)
1.怎么开启mass_storage(5.1上的方法)当然首先得有调用系统API的权限,然后UsbManager的setCurrentFunctions(UsbManager.USB_FUNCTION_MASS_STORAGE, true)StorageManager的enableUsbMassStorage();2.怎么预装sogouInput1.将sougouinput.apk放在apps原创 2017-04-05 14:28:22 · 469 阅读 · 0 评论 -
Oschina 安卓客户端源码学习之一
今天主要研究一下两个功能(1)双击返回键退出程序(2)接近完美地退出程序(1)在很多应用程序里都有一个功能,就是点击返回键,之后提示你再点击返回键就退出程序。之前一直很好奇这是怎么实现的,今天正好把开源中国安卓客户端源码扒下来了,所以就在这里研究一下这个很简单的功能。public class DoubleClickExitHelper { private fin原创 2014-10-11 13:55:18 · 3585 阅读 · 0 评论 -
Oschina 安卓客户端源码学习之三
今天呢,来研究一个功能,消息通知(1)首先是消息推送的获得或者说是产生。在main.java这个文件里有这样一个函数/** * 轮询通知信息 */ private void foreachUserNotice() { final int uid = appContext.getLoginUid(); final Handler handler = new Handle原创 2014-10-21 11:50:14 · 1661 阅读 · 0 评论 -
DIY新浪微博Android手机客户端
标 题: 【原创】DIY新浪微博Android手机客户端(一)(二)(三)完作 者: aqtata时 间: 2011-03-23,00:26:14链 接: http://bbs.pediy.com/showthread.php?t=131213作者:地球仪原文:http://hi.baidu.com/aqtata817/blog/i...87b8947bb.html转载 2014-11-13 17:45:34 · 1861 阅读 · 0 评论 -
AD Blocker Trial 注册算法
转自:http://www.kanxue.com/bbs/showthread.php?t=154770标 题: 【原创】AD Blocker Trial 注册算法作 者: iltgcl时 间: 2012-08-16,16:12:07链 接: http://bbs.pediy.com/showthread.php?t=154770【文章标题】: 【原创】AD Block转载 2014-11-13 17:41:15 · 905 阅读 · 0 评论 -
使用AndBug调试Android Java Bytecode
yhttp://bbs.pediy.com/showthread.php?t=141995转载 2014-11-13 17:21:54 · 791 阅读 · 0 评论 -
安卓签名文件研究
注:部分内容摘自网络。但是已经手动验证。1. Apk签名之后变化(多出来个meta-inf文件夹)。文件夹包括cert.rsa,cert.sf,manifest.mf三个文件。2. Manifest.mf文件保存了。apk里的所有文件逐个生成sha1签名在base64编码的信息。这地方我做了一个实验。第一次试验:在解压后的文件夹里随便找了一个文件,打开之后随便加了个原创 2014-11-13 14:26:10 · 2176 阅读 · 0 评论 -
安卓多平台批量打包
当项目需要在多个平台上线的时候,需要给不同的平台提供不同的游戏包。提供的时有这些需求需要实现。(1).游戏需要和不同的插件进行集成。(2).为了减小安装包大小,一个包只能包含一个插件(就算不去调用)。 项目采用的是C++代码生成so库,然后由Android代码以静态库的式进行加载。所以咱们集成的第三方库就只能通过引擎提供的PluginX来统一管理,并以jni的方式用C++代原创 2014-05-21 19:00:02 · 1970 阅读 · 0 评论 -
Android程序的签名保护及绕过方法
随着Android 市场的扩大,各类盗版、破解、打包党纷纷涌现,其使用的手法无非是apk _> smali ->修改代码 ->重打包签名,为对抗此类技术,广大程序员挖掘了Android平台特有的保护技术:签名校验 1、JAVA代码本地签名校验Android要求安装到手机上的APK文件必须有签名,而理论上开发者的签名他人是无法得到的(证书保护是另外一回事),所以转载 2014-11-10 18:14:59 · 1312 阅读 · 0 评论 -
Android APK 签名比对
本文转自 http://www.blogjava.net/zh-weir/archive/2011/07/19/354663.html转载 2014-11-11 18:14:45 · 715 阅读 · 0 评论 -
安卓平台多语言的简单实现
这里,我们实现两个语言,简体中文和繁体中文。在res目录下建议两个文件夹values-zh-rCNvalues-zh-rTW两个文件夹下都有一个strings.xml文件。两个同名文件的字符串表,id是一样的,但是,内容的语言不一样。比如提示 累了吧!休息一下吧!记得回来哦! 好的 点错了提示 累了吧!休息一下吧!記得回來哦!原创 2014-08-18 14:25:30 · 1084 阅读 · 0 评论 -
Android学习笔记之AndroidManifest.xml文件解析
一、关于AndroidManifest.xmlAndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Inte转载 2014-10-09 18:29:33 · 1061 阅读 · 0 评论 -
Oschina 安卓客户端源码学习之二
今天研究两个小功能1.原创 2014-10-16 11:24:05 · 1636 阅读 · 2 评论