commit 8e57de2e9f1d0eda0406df88089b746e7715b5c1
Author: luojia <luojia@caron-tech.com>
Date: Thu Dec 14 16:32:00 2023 +0800
bootsound
diff --git a/frameworks/base/cmds/bootanimation/Android.bp b/frameworks/base/cmds/bootanimation/Android.bp
index befb67bcf2..b7b285f8d1 100644
--- a/frameworks/base/cmds/bootanimation/Android.bp
+++ b/frameworks/base/cmds/bootanimation/Android.bp
@@ -18,6 +18,8 @@ cc_defaults {
"libcutils",
"liblog",
"libutils",
+ "libmedia",
+ "libaudioclient",
],
}
diff --git a/frameworks/base/cmds/bootanimation/BootAnimation.cpp b/frameworks/base/cmds/bootanimation/BootAnimation.cpp
index 301726d1aa..1d6a0cb51f 100644
--- a/frameworks/base/cmds/bootanimation/BootAnimation.cpp
+++ b/frameworks/base/cmds/bootanimation/BootAnimation.cpp
@@ -580,7 +580,7 @@ bool BootAnimation::threadLoop() {
} else {
result = movie();
}
-
+bootMusic();
eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroyContext(mDisplay, mContext);
eglDestroySurface(mDisplay, mSurface);
@@ -895,6 +895,7 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) {
// pathType, count, pause, path, color, clockPos1, clockPos2);
Animation::Part part;
part.playUntilComplete = pathType == 'c';
+ part.playUntilComplete = 1;
part.count = count;
part.pause = pause;
part.path = path;
@@ -1449,6 +1450,68 @@ status_t BootAnimation::TimeCheckThread::readyToRun() {
return NO_ERROR;
}
+void BootAnimation::bootMusic()
+{
+ int index;
+ const char *fileName = "/system/media/bootsound.mp3";//选择一个有权限访问的位置 存放开机铃声
+ MediaPlayer* mp = new MediaPlayer(); //创建MediaPlayer
+// MediaPlayer* mp = new MediaPlayer();
+ audio_devices_t device = AudioSystem::getDevicesForStream(AUDIO_STREAM_ENFORCED_AUDIBLE);
+// if (mp->setDataSource(NULL, fileName, NULL) == NO_ERROR)
+ if (mp->setDataSource(open(fileName, O_RDONLY), 0, 0x7ffffffffffffffL)== NO_ERROR)
+ {
+ mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE/*AudioSystem: :ENFORCED_AUDIBLE*/);
+ mp->prepare();
+ }
+ ALOGE ("bootMusic\n");
+ AudioSystem::initStreamVolume(AUDIO_STREAM_ENFORCED_AUDIBLE, 0,7);
+ AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, 7, device);
+ AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE/*AudioSystem::ENFORCED_AUDIBLE*/, &index, device);
+ ALOGE ("bootMusic index %d",index);
+// if (index != 0)
+// {
+ ALOGE("bootMusic playing %s", fileName);
+ mp->setVolume(0.4f, 0.4f);
+ mp->seekTo(0);
+ mp->start();
+// }
+}
} // namespace android
diff --git a/frameworks/base/cmds/bootanimation/BootAnimation.h b/frameworks/base/cmds/bootanimation/BootAnimation.h
index 6ba7fd450f..5445f2386f 100644
--- a/frameworks/base/cmds/bootanimation/BootAnimation.h
+++ b/frameworks/base/cmds/bootanimation/BootAnimation.h
@@ -28,7 +28,8 @@
#include <utils/Looper.h>
#include <utils/Thread.h>
#include <binder/IBinder.h>
-
+#include <media/AudioSystem.h>
+#include <media/mediaplayer.h>
#include <EGL/egl.h>
#include <GLES/gl.h>
@@ -121,7 +122,7 @@ public:
explicit BootAnimation(sp<Callbacks> callbacks);
virtual ~BootAnimation();
-
+ void bootMusic();
sp<SurfaceComposerClient> session() const;
private:
diff --git a/frameworks/base/cmds/bootanimation/bootanim.rc b/frameworks/base/cmds/bootanimation/bootanim.rc
index ad4de0ab73..3395824131 100644
--- a/frameworks/base/cmds/bootanimation/bootanim.rc
+++ b/frameworks/base/cmds/bootanimation/bootanim.rc
@@ -1,6 +1,6 @@
service bootanim /system/bin/bootanimation
class core animation
- user graphics
+ user media
group graphics audio
disabled
oneshot
diff --git a/frameworks/base/cmds/bootanimation/bootanimation_main.cpp b/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
index 6c7b3e51ff..a368c5eb0e 100644
--- a/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
+++ b/frameworks/base/cmds/bootanimation/bootanimation_main.cpp
@@ -43,10 +43,13 @@ int main()
sp<ProcessState> proc(ProcessState::self());
ProcessState::self()->startThreadPool();
-
+
// create the boot animation object (may take up to 200ms for 2MB zip)
sp<BootAnimation> boot = new BootAnimation(audioplay::createAnimationCallbacks());
-
+ //lj+s
+ BootAnimation *bootMusic = new BootAnimation(audioplay::createAnimationCallbacks());
+ bootMusic->bootMusic();
+ //lj+e
waitForSurfaceFlinger();
boot->run("BootAnimation", PRIORITY_DISPLAY);