Android MediaPlayer 对象的开发工作室错误

Android development studio error with MediaPlayer object

在 intellij 中出现错误,指出我没有在我的 setOnPreparedListener 中定义 onPrepared 方法 class。已查看文档,我的 onPrepared 方法代码与定义的相匹配。
代码:

import android.app.IntentService;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.util.Log;

import java.io.IOException;

/**
 * Created by tim on 4/19/2017.
 *
 */

public class TonePlayerIntentService extends IntentService implements MediaPlayer.OnErrorListener,
                                                           MediaPlayer.OnPreparedListener,
                                                            MediaPlayer.OnCompletionListener{

    private static final String LOG_TAG = "actotracker " + TonePlayerIntentService.class.getSimpleName();
    MediaPlayer mMediaPlayer = null;
    Uri chime = null;
    public TonePlayerIntentService() {
        super(LOG_TAG);
    }

    /**
     * called everytime an intent is launched
     */
    @Override
    public void onCreate() {
        super.onCreate();
        chime = Uri.parse("android.resource://"+getApplicationContext().getPackageName()+"//raw//chime.mp3");

    }

    /**
     * Handles incoming intents.
     * @param intent The Intent is provided (inside a PendingIntent) when requestActivityUpdates()
     *               is called.
     */
    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d(LOG_TAG,"IN onHandleIntent");
        this.onStartCommand();
    }

    public int onStartCommand(){
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setOnCompletionListener(this);
        mMediaPlayer.setLooping(false);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mMediaPlayer.setDataSource(getApplicationContext(), chime);
        }catch (IOException ie){
            DatabaseProcessor.getInstance().logErrorEvent(ie);
        }
        mMediaPlayer.setOnPreparedListener(new OnPreparedListener(){
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();
            }
        });
        mMediaPlayer.prepareAsync();

        mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener(){
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                cleanUpPlay();
                return true;
            }
        });
        mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                cleanUpPlay();
            }
        });

        return 1;
    }

    public void cleanUpPlay(){
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }

}

错误消息指出必须在 setOnPreparedListener 中定义 onPrepared(MediaPlayer) class。

希望能提供有关我做错了什么的信息。如果需要,我们很乐意提供更多信息。

更新了完整的代码。

尝试调用 mMediaPlayer.prepareAsync();设置好 OnPreparedListener

之后

编辑:删除工具及其背后的 class 名称。您的 class 没有实现任何接口,因为您正在内联实现它们,并且也删除了这一行。

mMediaPlayer.setOnCompletionListener(this);