-1

I'm trying to make a timer to play an MP3 file every 1.5 seconds(a beep) in my android application. I have the following code and receive the error "The method create (context,int) in the type MediaPlayer is not applicable for the arguments (Beep.RemindTask,int)" in my run function below:

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();

    }
}

I don't understand why it isn't applicable, the parameters being the same? I know its probably something to do with the context, which I am not entirely sure of, but from here: What is 'Context' on Android? I know they are used when creating new objects or accessing shared common resources. I have tried getApplicationContext(),getContext() and getBaseContext() but still receive errors. I believe that everything needed by the beep object to operate is located in this context. Any suggestions or ideas?

Community
  • 1
  • 1
user2999660
  • 13
  • 1
  • 4

4 Answers4

0

This should solve your problem:

MediaPlayer mPlayer = MediaPlayer.create(getActivity(), R.raw.beep); 
Joel
  • 4,732
  • 9
  • 39
  • 54
0

You're inside of the class RemindTask which extends TimerTask, when you use this, you're referring RemindTask.

Use getActivity() to get the Context of the Activity

MediaPlayer mPlayer = MediaPlayer.create(getActivity(), R.raw.beep);

moritzg
  • 4,266
  • 3
  • 37
  • 62
0

to use the method ,you should be in an activity or the compiler should know the context or should know the activity you are working with.To do that

Option 1: you can pass context from activity to this class. Option 2:you can use getActivity(). followed by your code

Ankit Srivastava
  • 354
  • 1
  • 5
  • 24
0

Your class is a non-activity class so you can't directly get at a context. When you instantiate an instance of Beep from your activity, pass in the activity's context in the constuctor.

Add a variable to your Beep class to hold a context:

private Context context;

In the constructor, store it:

public Beep(Context context) {
this.context=context;
//the rest of your constructor code...
}

Then you can do this:

MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.beep);
NigelK
  • 8,255
  • 2
  • 30
  • 28