将背景音乐音量从活动更改为服务
Posted
技术标签:
【中文标题】将背景音乐音量从活动更改为服务【英文标题】:Change background music volume from activity to service 【发布时间】:2020-11-27 15:43:18 【问题描述】:我是 android 新手,正在做一个项目,我必须在我们的应用程序中实现背景音乐。我已经使用服务实现了背景音乐,问题是:我不知道如何使用活动中的搜索栏动态更改音乐的音量。
我的服务如下所示:
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();
【问题讨论】:
【参考方案1】:好吧,一旦您在更改 SeekBar
时调用了 SeekBar
和 OnSeekBarChangeListener
,接下来的主要事情就是将此更改从您的活动传达给您的服务。
查看 android 文档 Creating a bound service,了解在 Activity
和 Service
之间进行通信的官方方式,不使用第三方库。
但是
您还可以使用像 EventBus 这样的第 3 方库(我建议这样做,因为在我看来它更容易使用和实施)。
这里是一个使用EventBus
的例子:
build.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;
PlaySound.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());
在你的activity里面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));
);
【讨论】:
请看我的更新,我忘了在服务类中的onEvent
方法上添加@Subscribe(threadMode = ThreadMode.MAIN)
,这是服务实际获取活动发送的消息所必需的
非常感谢! :) 你帮了我很多!
当然可以。如果是,请将此问题标记为已解决。谢谢以上是关于将背景音乐音量从活动更改为服务的主要内容,如果未能解决你的问题,请参考以下文章
将 android EditText 样式从矩形边框更改为下划线
如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton
Mogrify / ImageMagick 将 jpeg 背景从灰色更改为白色
将android EditText样式从矩形边框更改为下划线