【问题标题】:Android background music service安卓背景音乐服务
【发布时间】:2023-03-09 16:54:01
【问题描述】:

我正在开发一款安卓娱乐应用。我想播放背景音乐,我想为此使用服务。应用程序有 3 个活动,必须在所有活动中播放音乐。此外,当活动暂停时,音乐必须暂停并在销毁时停止。谁能告诉我该怎么做?任何链接或示例?

谢谢。

【问题讨论】:

    标签: android android-service background-music android-music-player


    【解决方案1】:

    无需服务即可完成

    https://web.archive.org/web/20181116173307/http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

    如果您对使用媒体播放器使用服务非常认真

    Intent svc=new Intent(this, BackgroundSoundService.class);
    startService(svc);
    

    public class BackgroundSoundService extends Service {
        private static final String TAG = null;
        MediaPlayer player;
        public IBinder onBind(Intent arg0) {
    
            return null;
        }
        @Override
        public void onCreate() {
            super.onCreate();
            player = MediaPlayer.create(this, R.raw.idil);
            player.setLooping(true); // Set looping
            player.setVolume(100,100);
    
        }
        public int onStartCommand(Intent intent, int flags, int startId) {
            player.start();
            return 1;
        }
    
        public void onStart(Intent intent, int startId) {
            // TO DO
        }
        public IBinder onUnBind(Intent arg0) {
            // TO DO Auto-generated method
            return null;
        }
    
        public void onStop() {
    
        }
        public void onPause() {
    
        }
        @Override
        public void onDestroy() {
            player.stop();
            player.release();
        }
    
        @Override
        public void onLowMemory() {
    
        }
    }
    

    请在清单中调用此服务 确保 .BackgroundSoundService 字符串末尾没有空格

    <service android:enabled="true" android:name=".BackgroundSoundService" />
    

    【讨论】:

    • 谢谢你,这对我很有帮助! :)
    • 为什么你不喜欢控制服务。 ?
    • 谢谢!工作正常,但这段代码有问题。在我的应用程序中,我有很多活动,但我在 onPause() 中声明了 finish()。我想在通过意图时播放 bgm,但意图调用 onpause 和服务停止(onpause 方法中的 cz 完成方法)。你有什么解决方案吗?
    • 您的链接不再有效,但这里几乎是相同的解决方案github.com/44maagnum/princetron_android/blob/master/src/…
    • 这里的idil 是什么?
    【解决方案2】:

    我找到了两个很好的资源来分享,如果其他人通过 Google 看到这个帖子,这可能会对他们有所帮助(2018 年)。 一个是这个视频教程,您将在其中实际了解服务的工作原理,这对初学者很有好处。

    链接:- https://www.youtube.com/watch?v=p2ffzsCqrs8

    其他是这个网站,它会真正帮助你使用背景音频播放器。

    链接:- https://www.dev2qa.com/android-play-audio-file-in-background-service-example/

    祝你好运:)

    【讨论】:

      【解决方案3】:

      我在运行它时遇到了问题,我做了一些更改以使用 mp3 源运行它。这是BackfrounSoundService.java 文件。考虑到我的 mp3 文件在我手机的 sdcard 中。

      public class BackgroundSoundService extends Service {
          private static final String TAG = null;
          MediaPlayer player;
      
          public IBinder onBind(Intent arg0) {
      
              return null;
          }
      
          @Override
          public void onCreate() {
              super.onCreate();
              Log.d("service", "onCreate");
              player = new MediaPlayer();
              try {
                  player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3");
              } catch (IOException e) {
                  e.printStackTrace();
              }
              player.setLooping(true); // Set looping
              player.setVolume(100, 100);
      
          }
      
          public int onStartCommand(Intent intent, int flags, int startId) {
              Log.d("service", "onStartCommand");
              try {
                  player.prepare();
                  player.start();
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return 1;
          }
      
          public void onStart(Intent intent, int startId) {
              // TO DO
          }
      
          public IBinder onUnBind(Intent arg0) {
              // TO DO Auto-generated method
              return null;
          }
      
          public void onStop() {
      
          }
      
          public void onPause() {
      
          }
      
          @Override
          public void onDestroy() {
              player.stop();
              player.release();
          }
      
          @Override
          public void onLowMemory() {
      
          }
      }
      

      【讨论】:

        【解决方案4】:

        使用START_STICKY 标志创建前台服务。

        @Override
        public int onStartCommand(Intent startIntent, int flags, int startId) {
           if (startIntent != null) {
               String action = startIntent.getAction();
               String command = startIntent.getStringExtra(CMD_NAME);
               if (ACTION_CMD.equals(action)) {
                   if (CMD_PAUSE.equals(command)) {
                       if (mPlayback != null && mPlayback.isPlaying()) {
                           handlePauseRequest();
                       }
                   } else if (CMD_PLAY.equals(command)) {
                       ArrayList<Track> queue = new ArrayList<>();
                       for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) {
                           queue.add((Track) Parcels.unwrap(input));
                       }
                       int index = startIntent.getIntExtra(ARG_INDEX, 0);
                       playWithQueue(queue, index);
                   }
               }
           }
        
           return START_STICKY;
        }
        

        然后可以从任何活动中调用它来播放一些音乐

        Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.java)
        intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks)
        intent.putExtra(MusicService.ARG_INDEX, position)
        intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY)
        activity.startService(intent)
        

        您可以使用bindService 绑定到服务,并通过相应的活动生命周期方法使服务暂停/停止。

        这是一个关于Playing music in the background on Android的好教程

        【讨论】:

          【解决方案5】:

          在这里聚会太晚了,但我还是要加我的 0.02 美元,Google 发布了一个名为通用音乐播放器的免费示例,您可以使用它学习跨所有 android 平台(汽车、手表、手机、电视.. )它使用服务在后台播放音乐,检查一下非常有帮助。这是项目的链接
          https://github.com/googlesamples/android-UniversalMusicPlayer

          【讨论】:

            【解决方案6】:

            @Synxmax 的答案在使用 ServiceMediaPlayer 类时是正确的,但是您还需要在 Manifest 中声明 Service 才能使其正常工作,如下所示:

            <service
                android:enabled="true"
                android:name="com.package.name.BackgroundSoundService" />
            

            【讨论】:

              【解决方案7】:

              HelloAndroid 上有一个关于这个主题的优秀教程。事实上,这是我在谷歌上获得的第一个打击。您应该在此处询问之前尝试使用谷歌搜索,因为这是一种很好的做法。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多