【问题标题】:Playing sounds on splash screen start up在启动画面上播放声音启动
【发布时间】:2021-05-10 12:48:43
【问题描述】:

我的应用程序中有一个启动画面,加载时间为 3 秒,在加载时我想要播放声音效果,我有一个 ogg 文件,并且希望每次启动应用程序时都播放它,可以有人告诉我该怎么做吗?我已经包含了启动活动。

public class SplashActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getSupportActionBar().hide();
            setContentView(R.layout.activity_splash);

            Runnable runable3secs = new Runnable() {
                @Override
                public void run() {
                    nextActivity();
                    finish();
                }
            };
        Handler myHandler = new Handler();
        myHandler.postDelayed(runable3secs,3000);
    }

    public void nextActivity(){
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);
    }
}

【问题讨论】:

  • 那么您尝试过什么来解决您的问题?
  • 我找到了这个,你可以试试 [StackOverflow-answer][1] [1]:stackoverflow.com/a/21043243/2917670问候
  • 到目前为止我已经尝试过 mp = MediaPlayer.create(getBaseContext(), R.raw.sound); mp.start();但我只想在启动画面打开时发出声音,并在主要活动开始时结束
  • 嗨,何塞,谢谢你的链接,我是否需要为媒体文件创建一个单独的类才能在启动画面中播放?我以为我可以在启动活动课上做到这一点

标签: android


【解决方案1】:

您可以通过运行线程和媒体播放器来做到这一点。不要忘记导入所有需要的东西。

public class SplashActivity extends AppCompatActivity {
    MediaPlayer mySong;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_splash);
        mySong=MediaPlayer.create(Splash.this,R.raw.your_audio_file);
        mysong.start();
        Thread timer=new Thread(){
        public void run(){
        try{
        sleep(3000);
        }catch(InterruptedException e){
         e.printStackTrace();

        }finally{
         nextActivity();


          }}} ;

        timer.start();
        }

}
 public void nextActivity(){
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);
 }

您还必须像下面这样覆盖onPause() 方法

 protected void onPause(){
        super.onPause();
        mySong.release();
        finish();
}

【讨论】:

  • 太棒了,似乎有效,我是否应该在暂停中添加任何额外的东西,比如关闭 super.onPause mySong.onpause?
  • 是的。您需要使用 mySong.release() 。我不小心错过了。我已经编辑了答案。谢谢@james
【解决方案2】:

嘿,使用这个链接Splash screen with sound

【讨论】:

    【解决方案3】:

    将声音文件放在res/raw 文件夹中,然后创建一个 MediaPlayer 实例,使用 MediaPlayer.create 引用该资源,> 然后在实例上调用 start():

    MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
    mp.start();
    

    停止声音使用:

    mp.stop()
    

    【讨论】:

    • 感谢您的回复 Akash,我会将它放在启动活动类中还是创建一个单独的类?提前致谢
    • 在 Splash Activity 类中。在 onCreate() 中播放声音并在 Runnable 中执行 mp.stop()
    【解决方案4】:

    我不喜欢 Android,但是是否有一个与术语“如何在 Flutter Splash Screen 中播放自定义声音”相关的搜索 您的帖子正在跟进,我在这里帮助那些不喜欢 kotlin 的 Flutter 开发者社区, java 等,所以没有开发人员空手而归,所以对于那些可能正在搜索这个词但没有找到互联网结果的颤振社区的人,我把你保存在某个地方,

    使用这种代码。

    final player = AudioCache(); //Define the player
    
        class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return FutureBuilder(
            future: Future.delayed(Duration(seconds: 3)),
            builder: (context, AsyncSnapshot snapshot) {
              // Show splash screen while waiting for app resources to load:
              if (snapshot.connectionState == ConnectionState.waiting) {
                player.play('sounds/notification_ambient.wav'); //Here is what will play sounds.
    
                return MaterialApp(home: Splash());
              } else {
                // Loading is done, return the app:
                return MaterialApp(
                    debugShowCheckedModeBanner: false,
                    home: TodoApp(),
                    title: 'Toodolee',
                    theme: ThemeData(
                      brightness: Brightness.light,
                      fontFamily: "WorkSans",
                    ));
              }
            });
      }
    }
    
    class Splash extends StatefulWidget {
      @override
      _SplashState createState() => _SplashState();
    }
    
    class _SplashState extends State<Splash> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Container(
            color: Colors.white70,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                FadeIn(
                  duration: Duration(milliseconds: 1200),
                  child: Center(
                      child: Icon(CarbonIcons.checkmark,
                          size: 90, color: Colors.black87)),
                ),
                FadeOut(
                    duration: Duration(milliseconds: 1100),
                    child: Center(child: Text("Made by Proco :love"))),
              ],
            ),
          ),
        );
      }
    }
    

    别忘了导入import 'package:audioplayers/audio_cache.dart';

    import 'package:audioplayers/audioplayers.dart'; 并在 pubspec.yaml 中宣布 audioplayers: 和资产中的位置。

    希望它会有所帮助,另外你可能会发现错误关于无法播放的声音所以不用担心,而不是像这样播放声音,player.play('assets\sounds/notification_ambient.wav'); 播放,player.play('sounds/notification_ambient.wav'); 不要总是提到资产它有时不工作,所以请享受......谢谢......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2023-03-17
      • 2014-01-02
      相关资源
      最近更新 更多