java - 服务、setVolume 和 Seekbar
问题描述
我有一个带有 MediaPlayer 的服务。我想通过搜索栏改变活动量。但是,我无法调用在活动中输入服务的函数。它返回一个空对象。有没有人知道如何解决它。感谢您的帮助。
这是我的 Logcat。
2021-04-10 14:12:50.692 9483-9483/com.example.projectv3 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.projectv3, PID: 9483
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.projectv3.Service_Music.setVol(float)' on a null object reference
at com.example.projectv3.A_Sound$2.onProgressChanged(A_Sound.java:52)
这是我的代码。
活动 通过活动中的搜索栏改变音量。
public class A_Sound extends AppCompatActivity {
SeekBar seekBar;
Service_Music service_music;
float tmp=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a_sound);
seekBar=findViewById(R.id.seekBar);
seekBar.setMax(100);
seekBar.setProgress(50);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
tmp=(float)progress/100;
service_music.setVol(tmp);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}
服务 在服务中设置 MediaPlayer,因为我想通过所有活动播放音乐。
public class Service_Music extends Service {
MediaPlayer myPlayer;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
//Toast.makeText(this, "Service Successfully Created", Toast.LENGTH_LONG).show();
myPlayer = MediaPlayer.create(this,R.raw.music02);
myPlayer.setLooping(true); // Set looping
}
public void setVol(float vol) {
try{
myPlayer.setVolume(vol,vol);
}catch (IllegalStateException e){
e.printStackTrace();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
myPlayer.start();
return START_STICKY;
}
@Override
public void onDestroy() {
//Toast.makeText(this, "Service Stopped and Music Stopped", Toast.LENGTH_LONG).show();
if(myPlayer!=null){
//stop playing
if(myPlayer.isPlaying()){
myPlayer.stop();
}
//release resource
myPlayer.release();
}
}
}
解决方案
推荐阅读
- php - 如何修复 Laravel 5.7 中的“类签名不存在”错误?
- c# - 按钮单击无法使 H1 可见 (asp.net)
- java - 原因:org.usb4java.LoaderException:在类路径/org/usb4java/windows-x86_64/libusb-1.0.dll 中找不到本机库
- python - 如何用super构造类实例?
- arrays - Ruby,在一行中打印所有哈希“子字段”
- javascript - Chrome 中与 Windows 规模相关的拖放问题 (125%)
- matlab - 如何在 MATLAB 中稳健地估计具有趋势、少量水平常数步长和噪声的信号的上下包络线
- qt - 如何制作从 QML 获取可变数量参数的 Q_INVOKABLE 方法
- javascript - 文本更改后,Edge/IE 浏览器在屏幕上留下最后一个字符串的字体位
- html - 上传了我的网站,但我的图片没有显示