android framework
文章平均质量分 96
ameyume
蓝蓝的天,白云朵朵。
展开
-
MediaRecorderClient决定使用stagefright还是opencore实现录音录像的代码实现
android录音或者录像时,决定是使用stagefright还是opencore框架的代码实现位于MediaRecorderClient类中,代码实现如下:MediaRecorderClient::MediaRecorderClient(const sp& service, pid_t pid){ LOGV("Client constructor"); mPid = pid;原创 2011-08-13 17:24:30 · 4007 阅读 · 2 评论 -
恢复出厂设置后默认铃声与烧机后的默认铃声不一致的问题
恢复出厂设置后默认铃声与烧机后的默认铃声不一致,包括来电铃声铃声,通知铃声,闹钟铃声。如果不单独设置默认初始铃声,则默认铃声是取db中的第一个铃声。/data/data/com.android.providers.media/databases/internal.db中audio VIEW(对应audio_meta表)中各自类型的第一条记录为默认铃声。例如,来电铃声(ringtone)原创 2012-05-28 10:03:56 · 8261 阅读 · 0 评论 -
Audio系统中声音输出设备的getOutput函数的调用流程图
Audio系统中设置声音输出设备的getOutput函数的调用流程图如下:AudioPolicyClientInterface的派生类只有一个,即AudioPolicyService类。AudioPolicyService的基类有三个,定义如下:class AudioPolicyService: public BnAudioPolicyService, public AudioPo原创 2012-06-28 23:56:32 · 6447 阅读 · 1 评论 -
AwesomePlayer类的seek操作介绍
AwesomePlayer类的seek操作介绍1.执行音频seek的地方(mAudioPlayer->seekTo)只有两处,一处是在seekAudioIfNecessary_l函数中,另外一处是在finishSeekIfNecessary函数中。2.执行seekAudioIfNecessary_l函数的地方有两处,一处是在seekTo_l函数中,另外一处是在play_l函数中。原创 2012-05-24 16:30:45 · 4143 阅读 · 1 评论 -
StagefrightPlayer取得当前播放位置和总时长
1. StagefrightPlayer计算取得的播放时长和总时长的单位是微秒(us),需要四舍五入为整数秒,用于播放器显示时长和播放进度。在计算时,是按照四舍五入的方式来计算的,即小于500ms的舍去,不计入时长;大于等于500ms的按照1s计入时长。这一点需要特别注意,因为在播放较短的文件时,在更新进度条时滑动块可能移动的不平滑。计算方法如下:status_t Stag原创 2012-05-10 15:08:32 · 3309 阅读 · 0 评论 -
MediaPlayer的reset()方法的作用
MediaPlayer的reset()方法经常使用,但具体为什么要用却不是很明白,今天看MediaPlayer的API说明,才知道是为了重用MediaPlayer对象。在MediaPlayer的API说明中有如下内容:In order to reuse a MediaPlayer object that is in the Error state and recover from原创 2012-10-13 14:51:28 · 28891 阅读 · 3 评论 -
MediaPlayer常见错误码
1. -2147483648 未知错误例如log输入出:MediaPlayer: error (1, -2147483648)错误码-2147483648是十进制表示的,对应16进制的0x80000000。它定义在文件:/frameworks/native/include/utils/Errors.hUNKNOWN_ERROR = 0x80000000,原创 2013-06-29 15:21:42 · 25696 阅读 · 1 评论 -
MediaRecorder和AudioRecord的区别和联系
MediaRecorder和AudioRecord都可以录制音频,区别是MediaRecorder录制的音频文件时经过压缩后的,需要设置编码器。并且录制的音频文件可以用系统自带的Music播放器播放。而AudioRecord录制的是PCM格式的音频文件,需要用AudioTrack来播放,AudioTrack更接近底层。在用MediaRecorder进行录制音视频时,最终还是会创建Audio原创 2012-08-20 11:28:15 · 23568 阅读 · 2 评论 -
Android SystemProperties设置/取得系统属性的用法总结
通过调查得知,Android系统中取得/设置系统属性的用法参考以下3篇文章就足够了。1.Android SystemProperties简介介绍了设置属性需要的权限,已经设置权限的方法。Systemproperties类在android.os下,但这个类是隐藏的,上层程序开发无法直接使用。其实用java的反射机制是可以使用这个类。何谓java反射机制,请自行研究学习原创 2012-10-10 15:08:19 · 145313 阅读 · 10 评论 -
关于android的4.2的0文件夹的详解
关于android的4.2的0文件夹的详解---- android 4.0 ----在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd卡上,然而gn是没有sd卡的,所以google想了一个办法,就是虚拟一个。所以,在userdata分区下有个目录叫media,是内置sd卡的数据存储位置,使用fuse技术将/data/转载 2014-04-10 09:58:00 · 1900 阅读 · 0 评论 -
Android audio设备的定义
audio设备的定义位于AudioSystem.h文件中enum audio_devices { // output devices 1.输出设备: DEVICE_OUT_EARPIECE = 0x1, // 听筒 DEVICE_OUT_SPEAKER = 0x2, // 扬声器 DEVICE_OUT_WIRED_HEADSET = 0x4, // 线控耳机,可原创 2012-06-05 14:53:47 · 21982 阅读 · 3 评论 -
MediaPlayer和AudioTrack播放Audio的区别与联系
播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。而AudioTrack只能播放已经解码的PCM流,如果是文原创 2012-05-31 10:30:50 · 23240 阅读 · 3 评论 -
MediaPlayer中创建AudioTrack的过程
MediaPlayer中创建AudioTrack的过程使用MediaPlayer播放音视频时,会创建AudioTrack对象用于播放音频数据。下面就来看看MediaPlayer创建AudioTrack的过程:1.创建AudioTrack对象MediaPlayer类中并没有直接创建AudioTrack,而是把创建AudioTrack对象的操作放在了MediaPlayerServi原创 2012-06-04 17:12:28 · 7409 阅读 · 0 评论 -
AMessage post方法的处理流程
Amessage post方法的处理流程1.AMessage::post(int64_t delayUs) call gLooperRoster.postMessage(this, delayUs) 2.ALooperRoster::postMessage call postMessage_l(msg, delayUs) 3.ALooperRoster::pos原创 2012-02-13 16:27:22 · 3290 阅读 · 0 评论 -
The calling sequence for ALooperRoster::deliverMessage
1. ALooper::start() while runOnCallingThread is true call ALooper::loop()2. ALooper::loop() call gLooperRoster.deliverMessage(event.mMessage); gLooperRoster is defined in ALoope原创 2012-02-13 15:34:34 · 3000 阅读 · 0 评论 -
Android frameworks中Bn*和Bp*的区别
Q:What do "Bn*" and "Bp*" stand for in frameworks/base/include/utils/IInterface.h ?I understand that "B" is for binder but what about "n" and "p"?It seems like "p" may stand for "remote" and "n"原创 2012-04-26 18:05:05 · 5587 阅读 · 0 评论 -
Android开关机动画/铃音是如何播放的?
1. 开关机动画的启动Android系统在init.rc中定义了很多Service,具体定义格式可以参考《Android Platform Developer’s Guide》中的“Android Init Language”。init.rc中定义的Service将会被init进程创建,其中已经定义的服务就包含了开机动画.每一项服务必须在/init.rc中定义Android系统启动时,转载 2012-05-11 10:32:33 · 7843 阅读 · 1 评论 -
编译NotificationManagerService.java文件的方法
修改文件NotificationManagerService.java (frameworks\base\services\java\com\android\server)需要编译:frameworks/base/services/java/com/android/server/生成:out/target/product/hsdroid/system/framework/services.原创 2012-05-24 15:10:11 · 2443 阅读 · 1 评论 -
Android SurfaceFlinger之CS架构
Surface, SurfaceFlinger的CS架构,写的不错。转自:http://www.cnblogs.com/xl19862005/archive/2011/11/17/2215363.htmlandroid之CS架构在此之前,有必要理清一下下表1中所列出的一些概念。ISurface定义了基础的Surface接口,供GUI系统客户端(应用)转载 2012-06-16 22:11:16 · 4558 阅读 · 0 评论 -
理解ICS Surface和SurfaceFlinger的处理流程
首先看下ISurfaceComposer接口ISurfaceComposer定义了基础接口,供客户端和Server端交互使用。ISurfaceComposer接口的派生类图示:------------------------------------------------------------------接口ISurfaceComposerClient->Bn原创 2012-03-16 10:30:44 · 4150 阅读 · 0 评论 -
创建mediaserver的过程
创建mediaserver,以及mediaserver中运行的几个service。1.文件frameworks/base/media/mediaserver/main_mediaserver.cppint main(int argc, char** argv){ sp proc(ProcessState::self()); sp sm = defaultService原创 2012-05-25 14:42:25 · 4857 阅读 · 0 评论 -
Android mediaserver占用CPU过高的问题
mediaserver是android中一个非常重要的进程,音频,视频,camera都和mediaserver进程有关,它启动的服务有:"media.audio_flinger", "media.player", "media.camera", "media.audio_policy"。 具体参考:创建mediaserver的过程 所以,如果mediaserver的cpu占原创 2012-06-27 14:15:57 · 16649 阅读 · 0 评论 -
AudioRecord的getMinBufferSize函数的分析
AudioRecord的getMinBufferSize函数的分析1.java用法示例此方法是静态方法,可以直接调用,测试用例如下,测试此函数的取得的最小buffer: int size = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_DEFAULT, AudioFormat.ENCODING_PCM_原创 2012-06-19 20:25:15 · 24353 阅读 · 3 评论 -
Android不同版本上Toast连续显示的问题
Toast可以用来显示提示信息,如果用户连续做某个动作,持续不断的弹出Toast,默认情况下会都显示出来,由于是toast是排队显示的,这样就会持续很长时间。通过查看API可知,可以执行show显示之前,先调用cancel取消之前的显示,这样就不会出现连续显示的问题,只显示最后一次的提示。但是,不是所有的版本上都可以这样使用的。通过查看Toast类的cancel函数可知,cancel函数在原创 2012-07-04 11:39:31 · 9975 阅读 · 2 评论