ساخت player
سلام دوستان
من یک پلیر در برنامه ام دارم. زمانی که فایل رو play می کنم و از اکتیویتی خارج می شم اون آهنگ همچنان play میشه که خیلی خوبه و مشکلی نیست، اما زمانی که مجدد به همون اکتیویتی برمی گردم می خوام seekbar روی همون قسمت آهنگ باشه که داره پخش میشه ولی باز برگشته به اول! و اگر روی دکمه play کلیک کنم مجدد آهنگ play میشه! یعنی آهنگ همزمان دو بار پخش میشه! لطفا راهنمایی کنید چطوری درستش کنم.
کدهای بازگشت
@Override
protected void onResume() {
super.onResume();
if(playing == true){
Uri uri = Uri.parse(G.DIR_SOUND + "/" + soundThumbnail);
player = MediaPlayer.create(ActivityMain.this, uri);
player.setLooping(false); // Set looping
player.setVolume(100,100);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(G.context,uri);
String durationStr = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int millSecond = Integer.parseInt(durationStr);
int min = (int) Math.floor((millSecond / 1000) / 60);
int sec = (millSecond / 1000) % 60;
txtPlayTime.setText(min + " : " + sec);
if (player.isPlaying() == false) {
skbPlay.setProgress((100 * player.getDuration()) / (millSecond));//اینجا می خوام ست کنم ولی نمی شه!
imgPlay.setImageResource(R.drawable.ic_pause);
} else if (player.isPlaying() == true) {
imgPlay.setImageResource(R.drawable.ic_play);
}
}
حدس می زنم چون مجدد player رو create می کنم اون آهنگی که play میشه رو نمیشناسه، اما زمانی که create هم نمی کنم برنامه کرش می کنه چون create نشده!
بطور کل اگر بشه همون آهنگ رو به player معرفی کرد این مشکل حل میشه، بنظرتون راهکارش چیه
اگه این پخش آهنگ یه کاریه که همیشه میخواد تکرار بشه نباید هی new instance کنی ازش، یه کلاس player بساز که همیشه "یه نمونه" ازش وجود داشته باشه تو کل برنامت ، میتونی واسه کلاس player از پترن singleton استفاده کنی، هم همیشه بهش دسترسی داری از همه جا، هم اینکه فقط یک نمونه از media player ساخته میشه.
ببینید این کد درسته؟
یه کلاس ساختم به اسم player و داخلش این مقادیر رو ریختم:
public class player {
public static MediaPlayer player;
private static Uri uri;
private String path;
private boolean loop;
private String playing;
private TextView textView;
public player path(String value){
path = value;
return this;
}
public player loop(boolean value){
loop = value;
return this;
}
public player playing(String value){
playing = value;
return this;
}
public player textView(TextView value){
textView = value;
return this;
}
public void play(){
uri = Uri.parse(path);
player = MediaPlayer.create(G.currentActivity, uri);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setLooping(loop); // Set looping
player.setVolume(100,100);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(G.context,uri);
String durationStr = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int millSecond = Integer.parseInt(durationStr);
int min = (int) Math.floor((millSecond / 1000) / 60);
int sec = (millSecond / 1000) % 60;
Log.i("LOG", "duration : " + millSecond);
textView.setText(min + " : " + sec);
if (playing.equals("play")){
player.start();
}else if (playing.equals("resume")){
player.pause();
}else if (playing.equals("stop")){
player.stop();
}
}
}
و داخل اکتیویتی زمانی که می خوام صداش کنم این کد رو زدم:
player play = new player();
play.path(G.DIR_SOUND + "/" + soundThumbnail)
.loop(false)
.playing("play")
.textView(txtPlayTime)
.play();
الان این متد وارد شده ولی باز player رو هر بار می سازم!
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .