我正在尝试制作一个计时器,在我的Android应用程序中每1.5秒(一声哔哔声)播放一个MP3文件。我有以下代码并在下面的运行函数中收到错误“MediaPlayer类型中的方法create(context,int)不适用于参数(Beep.RemindTask,int)”:
package com.example.timer;
import java.util.Timer;
import java.util.TimerTask;
import android.media.AudioManager;
import android.media.MediaPlayer;
public class Beep {
Timer timer;
public Beep() {
timer = new Timer();
timer.schedule(new RemindTask(),
0, //initial delay
1*1500); //subsequent rate
}
class RemindTask extends TimerTask {
public void run() {
MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.beep);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.start();
}
}
public void main(String args[]) {
new Beep();
}
}
我不明白为什么它不适用,参数是一样的?我知道它可能与上下文有关,我不完全确定,但是从这里开始:What is 'Context' on Android?我知道在创建新对象或访问共享公共资源时会使用它们。我尝试了getApplicationContext()
,getContext()
和getBaseContext()
,但仍然收到错误。我相信beep对象操作所需的一切都位于此上下文中。有什么建议或想法吗?
答案 0 :(得分:0)
这可以解决您的问题:
MediaPlayer mPlayer = MediaPlayer.create(getActivity(), R.raw.beep);
答案 1 :(得分:0)
你在扩展TimerTask的RemindTask类中,当你使用this
时,你指的是RemindTask。
使用getActivity()获取活动的上下文
MediaPlayer mPlayer = MediaPlayer.create(getActivity(),R.raw.beep);
答案 2 :(得分:0)
要使用该方法,您应该在一个活动中,或者编译器应该知道上下文或者应该知道您正在使用的活动。为此
选项1:您可以将上下文从活动传递到此类。 选项2:您可以使用getActivity()。然后是你的代码
答案 3 :(得分:0)
您的课程是非活动课程,因此您无法直接进入上下文。当您从活动中实例化Beep实例时,请在构造函数中传入活动的上下文。
将一个变量添加到Beep类以保存上下文:
private Context context;
在构造函数中,存储它:
public Beep(Context context) {
this.context=context;
//the rest of your constructor code...
}
然后你可以这样做:
MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.beep);