2017-04-22 11 views
0

私は単純な音楽アプリを構築しています。mediaplayer現在の位置は常にゼロです

私が試したものに関係なく、新しい曲を再生するために曲を停止することはできません。私は、ストップ、リリース、ストップ、リリースを一緒に試みました。私はサービスを作りました。私は現在のポジションを使ってMp3のポジションを取得しようとしていて、ポジションが1より大きければそれを再生することを検討しました。
しかし何も働かず、これを理解しようと怒っています。
私はこれを5日間働き、私がそれを投げたすべてで失敗しました。

私は、アドバイスと明確な解決策を非常に高く評価します。
私はnoobです。私は自分の問題を解決するために非常に努力していますが、これはただ私に困惑しています。

import android.app.Service; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.IBinder; 
import android.support.annotation.Nullable; 
import android.util.Log; 

import java.io.IOException; 


public class MyService extends Service { 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    MediaPlayer mediaplayer; 
    mediaplayer = new MediaPlayer(); 
    mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    String extRec = intent.getExtras().getString("extRec"); 
    Log.d("My Service", "Received extra: " + extRec); 

    if (mediaplayer.isPlaying()){ 

     Log.d("My Service is playing ", "yes"); 

    } 
    else { 
     Log.d("My Service is playing ", "no"); 
    } 

    //mediaplayer.stop(); 
    //mediaplayer.release(); 

    try { 

     final String AudioURL = extRec; 
     Log.d("My Service audioURL ", AudioURL); 

     mediaplayer.setDataSource(AudioURL); 
     mediaplayer.prepare(); 

     Log.d("My Service", "position: " + mediaplayer.getCurrentPosition()); 
     mediaplayer.start(); 

    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return START_STICKY; 
} 
} 
+0

あなたは何をすべきかそう、getCurrentPosition() 'の前に'開始() 'メソッド'呼んでいます現在のポジションについて期待していますか? – pskink

答えて

-1

メディアコントローラがお手伝いしますユーザー:

public class AudioPlayer extends Activity implements OnPreparedListener, MediaController.MediaPlayerControl{ 
    private static final String TAG = "AudioPlayer"; 

    public static final String AUDIO_FILE_NAME = "audioFileName"; 

    private MediaPlayer mediaPlayer; 
    private MediaController mediaController; 
    private String audioFile; 

    private Handler handler = new Handler(); 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.audio_player); 

    audioFile = this.getIntent().getStringExtra(AUDIO_FILE_NAME); 
    ((TextView)findViewById(R.id.now_playing_text)).setText(audioFile); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setOnPreparedListener(this); 

    mediaController = new MediaController(this); 

    try { 
     mediaPlayer.setDataSource(audioFile); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } catch (IOException e) { 
     Log.e(TAG, "Could not open file " + audioFile + " for playback.", e); 
    } 

    } 

    @Override 
    protected void onStop() { 
    super.onStop(); 
    mediaController.hide(); 
    mediaPlayer.stop(); 
    mediaPlayer.release(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    //the MediaController will hide after 3 seconds - tap the screen to make it appear again 
    mediaController.show(); 
    return false; 
    } 

    //--MediaPlayerControl methods---------------------------------------------------- 
    public void start() { 
    mediaPlayer.start(); 
    } 

    public void pause() { 
    mediaPlayer.pause(); 
    } 

    public int getDuration() { 
    return mediaPlayer.getDuration(); 
    } 

    public int getCurrentPosition() { 
    return mediaPlayer.getCurrentPosition(); 
    } 

    public void seekTo(int i) { 
    mediaPlayer.seekTo(i); 
    } 

    public boolean isPlaying() { 
    return mediaPlayer.isPlaying(); 
    } 

    public int getBufferPercentage() { 
    return 0; 
    } 

    public boolean canPause() { 
    return true; 
    } 

    public boolean canSeekBackward() { 
    return true; 
    } 

    public boolean canSeekForward() { 
    return true; 
    } 
    //-------------------------------------------------------------------------------- 

    public void onPrepared(MediaPlayer mediaPlayer) { 
    Log.d(TAG, "onPrepared"); 
    mediaController.setMediaPlayer(this); 
    mediaController.setAnchorView(findViewById(R.id.main_audio_view)); 

    handler.post(new Runnable() { 
     public void run() { 
     mediaController.setEnabled(true); 
     mediaController.show(); 
     } 
    }); 
    } 
} 

良い演奏機能を使用する場合Exoplayer

+0

ありがとうございます。試してみます – user3758065

関連する問題