2017-04-22 68 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