修改 android的 开机 音乐

摘要:
源代码目录位于framworks/base/data/grounds中。至于编译后源代码的位置,它是在Android上配置的。mk文件。但它在这里被称为AllAudio。我们可以看到,mk也包含许多mk文件,这些文件可以在同一个目录中找到。如上图所示,我们可以打开任何一个,查看这些资源在编译后的位置。
修改动画 的 教程, 接下来我们给系统添加开机声音

由于动画是在BootAnimation播放的,所以我们的声音肯定也在这个类中做,照猫画虎

首先在BootAnimation.h添加方法的声明和头文件的引用

#include <media/AudioSystem.h>
#include
<media/mediaplayer.h>

image

添加方法 void bootMusic();

image

然后在BootAnimation.cpp中实现这个方法:

void BootAnimation::bootMusic()
{
intindex;
MediaPlayer
*mp=newMediaPlayer();
if(mp->setDataSource("/system/etc/poweron.wav",NULL)==NO_ERROR)

{
mp
->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);
mp
->prepare();
}
AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE,
&index);
if(index !=0)

{
mp
->seekTo(0);
mp
->start();
}
}

请注意这个目录setDataSource("/system/etc/poweron.wav", NULL)

其实这个目录是随便写的,你想从哪个目录读这个文件就从哪个目录读好了,但是你要把这个文件放在对应的目录下

比如,这个目录是system/etc (这个目录是android系统的目录,不是源码的目录),这个文件夹是只有读权限而没有写权限的,所有你不用试adb shell了,没用的

其实system/etc这个目录对应的是我们编译后out文件夹下的xxx,然后在system/etc,所以你把poweron.wav放到这里就行了,当然如果你这时再emulaor 也同样是看不到效果的,因为你修改完还没有编译,和上面修改图片一样,make snod一下

image

然后和图上一样,你就会生成新的system.img,当然你之前添加的poweron.wav也会自动被编译进去了

然后再修改bootanimation_main.cpp这个文件,因为方法也申明了,也实现了,就是还没有调用,所以就在这里调用

//play boot music-yp
BootAnimation
*animation=newBootAnimation();
animation
->bootMusic();

image

修改完这写以后还需要修改Android.mk文件

因为播放声音还需要引入库

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libui \

libskia \

libEGL \

libGLESv1_CM \

libgui \

libmedia

请注意,libmedia是新添加的;

完事后就ok了,当然还是需要编译的

mmm frameworks/base/cmds/bootanimation/

make snod

大功告成,这样你就成功的添加了开机音乐

也许有人会问,那android系统自带的那些音乐和铃声在什么地方呢?

源码目录在framworks/base/data/sounds

至于编译完成后放到什么地方了那是Android.mk文件上配置的

不过这里叫AllAudio.mk

image

我们可以看到他又包含了很多mk文件,在同一目录下就可以找到,如 上图所示,我们随便打开一个看看

image

从里边可以知道,这些资源编译后都去了什么地方。

所以,在刚才添加poweron.wav的时候,其实可以直接把声音资源丢到framworks/base/data/sounds这个目录下

然后再mk文件中这样修改:

$(LOCAL_PATH)/poweron.wav:system/etc/poweron.wav \

不用我说,当然是执行mmm还有make snod命令了

其实还有一种办法,如果你不想这么麻烦,你可以直接把poweron.wav 文件丢到./frameworks/base/core/res/assets/sounds下,用的时候怎么用呢?

加载的时候路径是什么呢?我们看看源码

我们可以看到之前我们修改的那两张图片是怎么被加载进来的/frameworks/base/cmds/bootanimation/BootAnimation.cpp

image

这个方法的两个参数是:

image

是不是顿时又明白了?

原来精髓所在是有个Asset可以使用,这个和上层开发中是一样的,这个文件夹中的东西是不编译的。

免责声明:文章转载自《修改 android的 开机 音乐》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用replaceAll实现字符串替换资源从3ds max导入UE4问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于Linux下conio头文件的实现

在windows下,c语言有库conio.h,实现了不少函数,但是Linux c没有这个库,内部的函数需要自己实现。 //clrsrc清屏函数的一种实现:void clrscr(void) {   system("clear");//需要头文件stdlib.h }//调用system("clear") //getch()函数的一种实现方法#include&...

渐变颜色LinearGradientBrush

LinearGradientBrush是用来渐变效果的,使用的初始化参数是矩形区域,开始颜色,结束颜色,颜色变化方向,它能够形成比较统一的渐变效果,对比PathGradientBrush的渐变,它的特点是它与周围的颜色渐变频率是一样的,设置LinearGradientBrush的区域大小时,可以想象一个大的有渐变色的长方形,压在多边形上面,并根据多边形的边...

Android开发系列之ListView用法

  ListView是我们开发过程中最常用的控件之一,由于手机屏幕空间都比较有限度,能够一次性在屏幕上显示的内容并不多,当我们程序中有大量的数据需要展示的时候,就可以借助它来完成。它允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。 一、ListVeiw的简单用法   首先在XML文件中定义ListView的布局...

C#中处理鼠标和键盘的事件

一 C#中处理鼠标相关的事件:  鼠标相关的事件大致有六种,分别是 :   "MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"和"MouseUp"。 (1).如何在C#程序中定义这些事件:  在C#中是通过不同的Delegate来描述上述事件,其中描述"MouseHover"、"...

QT 5.4.1 for Android Windows环境搭建

QT 5.4.1 for Android Windows环境搭建2015-5-13       目录 一、参考文章:  二、准备软件:  三、安装准备好的软件:  四、配置Qt 5.4.1 for Android  五、解决 Creator Qt Quick 模拟层已崩溃  六、解决没有 kit selection(构建套件(Kit))  七、解决编译出错...

在AndroidStudio上使用AddressSanitizer

在AndroidStudio上使用AddressSanitizer AddressSanitizer是Google主导的一个开源内存问题检测工具。现在也开始支持Android平台,且受Google推荐来替代之前的Valgrind。目前AddressSanitizer能够发现如下问题: Out-of-bounds accesses to heap, sta...