簡體   English   中英

通過MediaController(Android)播放聲音時,為什么SeekBar不移動?

[英]Why does the SeekBar not move when sound is played via MediaController (Android)?

我正在嘗試在Android應用程序中使用mediacontroler播放音頻文件。 播放音頻時,搜索欄不會移動。我查看了mediacontroler函數。 但是我找不到更新搜索欄的功能。 請指教。

public class Show_subject_Activity extends Activity
    implements MediaController.MediaPlayerControl, MediaPlayer.OnBufferingUpdateListener {
private RatingBar box_litner;
private MediaController mController;
private MediaPlayer mPlayer;
private Cursor cur;
int bufferPercent = 0;
DB_Nabege_helper db_nabege = new DB_Nabege_helper(this);
private String voicefileName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_show_subject);

    box_litner = (RatingBar) findViewById(R.id.ratingBar1);
    mController = (MediaController) findViewById(R.id.mediaController_voice);
    mController.setAnchorView(null);
    db_nabege.open();
    cur = db_nabege.getSubject(Intent_values.id_subject);
    voicefileName = getVoiceFileName();
    db_nabege.close();
}

@Override
public void onResume() {
    super.onResume();
    mPlayer = new MediaPlayer();
    // Set the audio data source
    try {
        mPlayer.setDataSource(this, getUriVoice());
        mPlayer.prepare();
    } catch (Exception e) {
        e.printStackTrace();
    }
    // Set an image for the album cover
    // coverImage.setImageResource(R.drawable.icon);

    mController.setMediaPlayer(this);
    mController.setEnabled(true);
}

private Uri getUriVoice() {
    File voiceFile = null;
    try {
        voiceFile = new File(Environment.getExternalStorageDirectory().getPath() + "/nabege" + File.separator
                + "audio" + File.separator + voicefileName);
    } catch (Exception e) {
        Log.d("log", e.toString());
    }
    Uri voiceUri = Uri.fromFile(voiceFile);
    return voiceUri;
}

@Override
public void onPause() {
    super.onPause();
    mPlayer.release();
    mPlayer = null;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    mController.show();
    return super.onTouchEvent(event);
}

// MediaPlayerControl Methods
@Override
public int getBufferPercentage() {
    return bufferPercent;
}

@Override
public int getCurrentPosition() {
    return mPlayer.getCurrentPosition();
}

@Override
public int getDuration() {
    return mPlayer.getDuration();
}

@Override
public boolean isPlaying() {
    return mPlayer.isPlaying();
}

@Override
public void pause() {
    mPlayer.pause();
}

@Override
public void seekTo(int pos) {
    mPlayer.seekTo(pos);
}

@Override
public void start() {
    mPlayer.start();
}

// BufferUpdateListener Methods
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
    bufferPercent = percent;
}

public boolean canPause() {
    return true;
}

public boolean canSeekBackward() {
    return true;
}

public boolean canSeekForward() {
    return true;
}

@Override
public int getAudioSessionId() {
    return 0;
}
}

您可以自己更新搜索欄,例如:

final Handler mHandler = new Handler();
final Runnable mUpdateSeekbar = new Runnable() {
    public void run() {
        mSeekBar.setProgress(mMediaPlayer.getCurrentPosition());
        mSeekBar.setMax(mMediaPlayer.getDuration());
        mHandler.postDelayed(this, 1000);
    }
};

將可運行內容發布到onResume並將mHandler.removeCallbacks(mUpdateSeekbar)onPause

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM