zoukankan      html  css  js  c++  java
  • 修改 android的 开机 音乐

    修改动画 的 教程, 接下来我们给系统添加开机声音

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

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

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

      image

     添加方法 void bootMusic();

      image

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

    void BootAnimation::bootMusic()
    {
         int index;
         MediaPlayer
    * mp=new MediaPlayer();
         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=new BootAnimation();
    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可以使用,这个和上层开发中是一样的,这个文件夹中的东西是不编译的。

  • 相关阅读:
    侧边工具栏
    proguard 使用说明
    人员组成
    google play
    大数据平台相关
    HttpClient
    库克
    html5 开发 android 注意点
    htm5 动画制作 工具
    JAVA取得WEBROOT物理路径
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744988.html
Copyright © 2011-2022 走看看