android - 从计时器启动 MediaPlayer
问题描述
我正在开发一个电池警报应用程序。我想使用计时器每隔一分钟使用媒体播放器播放音乐,并且还想在一分钟内重复音乐 2 次。
这在 Timer 第一次调用*8playAlarm() 方法** 时可以正常工作,但一分钟后,当Timer再次调用playAlarm() 方法时,它只播放一次音乐。
@Override
public void onCreate() {
super.onCreate();
mStartTime=preferencesAlert.getInt("alert",0); // 0 == immediately
mInterval=preferencesInterval.getInt("interval",1); // 1==1 minute
mSongUri=preferencesSongUri.getString("uri","android.resource://"+getPackageName()+"/raw/celesta");
timer = new Timer();
TimerTask hourlyTask = new TimerTask() {
@Override
public void run () {
playAlarm();
}
};
// schedule the task to run starting now and then every time interval...
timer.schedule (hourlyTask,60000*mStartTime, 60000*mInterval);
}
playAlarm() 方法
private void playAlarm(){
playerAlarm=MediaPlayer.create(getApplicationContext(),Uri.parse(mSongUri));
playerAlarm.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
repeatMax=preferencesRepeat.getInt("repeat",2);
if(repeatMin<=repeatMax){
repeatMin++;
if(playerAlarm!=null && !playerAlarm.isPlaying()) {
mp.seekTo(0);
mp.start();
}
}else {
mp.reset();
mp.release();
}
}
});
playerAlarm.start();
}
我想每分钟播放两次音乐,但它只播放一次
解决方案
第一次有效,因为您repeatMin
仍然是第一个值,但是在您没有在代码中再次将其设置为 0 之后
repeatMin = first int value; // you have to reinitialize your repeatMin somewhere when the sound
has been played for the second time
推荐阅读
- javascript - 日期前的“+”有什么作用?
- django - django rest 框架:如何从序列化器类型生成模式?
- sockets - 有没有办法使用 SctpStream 在单个系统调用中接收多条消息?
- c - time_t 的转换如何在 C 中工作?
- html - 为什么我的 div 下面有一个空格?
- amazon-web-services - 无法放置任务,因为没有容器实例满足其所有要求
- javascript - 画布没有显示在浏览器中使用-fillRect
- angular - 如何在 Angular 应用程序中验证 HTML 模板?
- matlab - 积分和标量积函数处理matlab
- android - 弃用 getRunningservices(ActivityManager) 后如何在 Android 8/O (Oreo) 中提取正在运行的服务