Android学习开发之路21--Android添加开机音乐的具体方法

Android启动时第三段开机动画叫bootanimation,源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来,具体怎么制作这个压缩包,网上有很多的示例,在此不再赘述;
这段代码默认是不支持音乐播放的,想要添加开机音乐(与第三段开机动画bootanimation同步),最好就加这里啦,
下面先提供一段c++代码,在android下编译成可执行程序之后运行就能播放音乐了:
test.cpp:

  1. #define LOG_TAG "TEST_MP3"
  2. #include <binder/IPCThreadState.h>
  3. #include <media/AudioSystem.h>
  4. #include <media/mediaplayer.h>

  5. using namespace android;

  6. int main(int argc, char *argv[])
  7. {
  8. sp<ProcessState> proc(ProcessState::self());
  9. ProcessState::self()->startThreadPool();

  10. int index;
  11. MediaPlayer* mp = new MediaPlayer();
  12. if (mp->setDataSource("/sdcard/bootup.mp3", NULL) == NO_ERROR) {
  13. mp->setAudioStreamType(AudioSystem::ENFORCED_AUDIBLE);
  14. mp->prepare();
  15. }

  16. AudioSystem::getStreamVolumeIndex(AudioSystem::ENFORCED_AUDIBLE, &index);
  17. if (index != 0) {
  18. mp->seekTo(0);
  19. mp->start();
  20. }
  21. IPCThreadState::self()->joinThreadPool();

  22. return 0;
  23. }
Android.mk:
  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)

  3. LOCAL_SRC_FILES:= \
  4. test.cpp

  5. LOCAL_SHARED_LIBRARIES := \
  6. libui \
  7. libutils \
  8. libbinder \
  9. libcutils \
  10. libmedia \
  11. libcamera_client \
  12. libsurfaceflinger_client

  13. LOCAL_C_INCLUDES := \
  14. $(call include-path-for, corecg graphics) \

  15. LOCAL_MODULE:= test_mp3

  16. LOCAL_MODULE_TAGS=optional
  17. include $(BUILD_EXECUTABLE)
编译结束后会在/system/bin/下生成test_mp3可执行程序,执行就可以播放/sdcard/bootup.mp3了。
其实播放的代码就是:
  1. int index;
  2. MediaPlayer* mp = new MediaPlayer();
  3. if (mp->setDataSource("/sdcard/bootup.mp3", NULL) == NO_ERROR) {
  4. mp->setAudioStreamType(AudioSystem::ENFORCED_AUDIBLE);
  5. mp->prepare();
  6. }
  7. AudioSystem::getStreamVolumeIndex(AudioSystem::ENFORCED_AUDIBLE, &index);
  8. if (index != 0) {
  9. mp->seekTo(0);
  10. mp->start();
  11. }
需要注意的是,要把它加在
  1. sp<ProcessState> proc(ProcessState::self());
  2. ProcessState::self()->startThreadPool();

  1. IPCThreadState::self()->joinThreadPool();

之间,否则在MediaPlayer prepare的时候会收不到系统发回的已经准备完成的消息。仿照上面的例子,将播放的代码加到bootanimation_main.cpp适当的位置,就可以播放开机音乐了哦

参考资料:

学习教程与开发资料下载:

Android 15本经典教程和150多个实例源码

Android APP开发年终总结——日均160元的收入经历

成为Android高手必须掌握的28大项内容和10个建议

成为Java高手需要达到的25个学习目标--经典

24本经典Arm教程与学习开发资料下载

18本经典PHP教程与开发资料下载

2000年-2011年cet4历年24份真题和答案(含详细解析)

14本名师经典励志教程

更多相关文章

  1. android—调试命令service
  2. 转载:在 ANDROID DIALOG中使用AUTOCOMPLETETEXT
  3. 4.4以上android沉浸式
  4. Android(安卓)4.0.1_r1源代码发布,更新获取方法
  5. 6.1.5 GridView详解编辑
  6. Android中使用lambda表达式
  7. Android中JNI高级应用 - 本地C代码中创建Java对象及本地JNI对象
  8. Android培训班(31)
  9. android关闭整个应用程序

随机推荐

  1. (转载)android之PhoneGap入门
  2. Android设置系统时间
  3. Android View源码解析
  4. Android之组件详解
  5. android bolg and other
  6. android 混编源代码
  7. Android AIDL进程间通信的简单使用
  8. android的单选框例子
  9. Android Studio 生成UML类图
  10. android 横向切换 activity