将背景音乐音量从活动更改为服务

6ljaweal  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(343)

我是android的新手,正在做一个项目,在这个项目中我必须在我们的应用程序中实现背景音乐。我已经使用服务实现了背景音乐,问题是:我不知道如何使用活动中的seekbar动态更改音乐的音量。
我的服务是这样的:

package hu.szoftverprojekt.holdemfree.controller;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

import androidx.annotation.Nullable;

import hu.szoftverprojekt.holdemfree.R;

public class PlaySound extends Service {

    MediaPlayer player;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        player=MediaPlayer.create(this, R.raw.ss);
        player.setLooping(true);
        player.start();
        player.setVolume(SettingsScreen.volume, SettingsScreen.volume);
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        player.stop();
    }
}
bfnvny8b

bfnvny8b1#

一旦你有了 SeekBar 以及 OnSeekBarChangeListener 在你换衣服的时候被叫来 SeekBar ,下一个主要的事情是将这一点从您的活动传达到您的服务。
看一看android文档,它创建了一个绑定服务,用于在 Activity 以及 Service 不使用第三方库。
然而
您还可以使用像eventbus这样的第三方库(我建议使用eventbus,因为我认为它更易于使用和实现)。
下面是一个使用 EventBus :
内部版本.gradle:

dependencies {
    implementation 'org.greenrobot:eventbus:3.2.0'
}

mediavolumeevent.java文件:

public class MediaVolumeEvent {
    private int volume;

    public MediaVolumeEvent(int volume) {
        this.volume = volume;
    }

    public int getVolume() {
        return volume;
    }
}

播放声音.java:

public class PlaySound extends Service {
  @Override
  public void onCreate() {
    super.onCreate();
    EventBus.getDefault().register(this);
  }

  @Override
  public void onDestroy() {
    EventBus.getDefault().unregister(this);
    player.stop();
    super.onDestroy();
  }

  @Subscribe(threadMode = ThreadMode.MAIN) 
  public void onEvent(MediaVolumeEvent event){
    player.setVolume(event.getVolume(), event.getVolume());
  }
}

在你的活动中 OnSeekBarChangeListener :

SeekBar seekBar= (SeekBar) findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {       

    @Override       
    public void onStopTrackingTouch(SeekBar seekBar) {      
        // TODO Auto-generated method stub      
    }       

    @Override       
    public void onStartTrackingTouch(SeekBar seekBar) {     
        // TODO Auto-generated method stub      
    }       

    @Override       
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        EventBus.getDefault().post(new MediaVolumeEvent(progress));
    }       
});

相关问题