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