上下文未被识别:方法不适用于参数

时间:2013-11-16 16:19:06

标签: java android eclipse android-context

我正在尝试制作一个计时器,在我的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对象操作所需的一切都位于此上下文中。有什么建议或想法吗?

4 个答案:

答案 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);