2017-04-19 18 views
0

私のsetOnPreparedListenerクラスでonPreparedメソッドが定義されていないことを示すintellijのエラーを取得しています。 onPreparedメソッドのドキュメントとコードが、定義されているものと一致していることを確認しました。
コード:MediaPlayerオブジェクトでのAndroid開発スタジオのエラー

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; 
    } 

} 

エラーメッセージがonPrepared(MediaPlayerの)はsetOnPreparedListenerクラスで定義しなければならないことを述べています。

私が間違ったことについての情報を感謝します。リクエストされた場合、より多くの情報を提供してください。

完全なコードで更新されました。

答えて

0

mMediaPlayer.prepareAsync()を呼び出してみてください。あなたのOnPreparedListenerを設定した後

編集:それの背後にある実装とクラス名を削除します。あなたのクラスはインラインで実装しているので、インターフェイスを実装していません。この行も削除してください。

mMediaPlayer.setOnCompletionListener(this); 
+0

はmMediaPlayer.setOnPreparedListener(新しいOnPreparedListener(){;} onPrepared @Override 公共ボイド(MediaPlayerのMediaPlayerの){ mediaPlayer.start()})はなかったです。 mMediaPlayer.prepareAsync(); – Pauly

+0

同じエラーが報告されました。おかげで、Lintは検査でエラーをピックアップしていません – Pauly

+0

完全なエラーログを投稿できますか? MediaPlayerに間違ったインポートを使用している可能性がありますが、そうは思われません。 – Rockney

関連する問題