آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ساخت player

SaeiD-as  8 سال پیش  8 سال پیش
0 0

سلام دوستان
من یک پلیر در برنامه ام دارم. زمانی که فایل رو 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 معرفی کرد این مشکل حل میشه، بنظرتون راهکارش چیه

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
HaDiSs  8 سال پیش
+1 0

اگه این پخش آهنگ یه کاریه که همیشه میخواد تکرار بشه نباید هی new instance کنی ازش، یه کلاس player بساز که همیشه "یه نمونه" ازش وجود داشته باشه تو کل برنامت ، میتونی واسه کلاس player از پترن singleton استفاده کنی، هم همیشه بهش دسترسی داری از همه جا، هم اینکه فقط یک نمونه از media player ساخته میشه.

0 0
سپاس از توضیحتون، می تونید این پترن singleton رو بیشتر بازش کنید؟ روی همین کد پیاده اش کنید؟ (8 سال پیش)
پاسخ به سوال 
SaeiD-as  8 سال پیش
0 0

ببینید این کد درسته؟

یه کلاس ساختم به اسم 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 رو هر بار می سازم!

0 0
میتونید توضیح بدید چطوری می تونم اینو فقط یبار بسازم؟ الآن بازم هر بار دارم میسازمش! داخل متد onResume صداش می کنم ساخته می شه، داخل onCreate بازم ساخته می شه! هر جایی که می خوام بخونمش باز ساخته می شه! (8 سال پیش)
0 0
دوستان لطفا راهنمایی کنید، واقفا نمی دونم چطوری درستش کنم، یه راهنمایی کوچیک از طرف شما ممکنه درستش کنه (8 سال پیش)
0 0
دوستان لطفا راهنمایی کنید، واقفا نمی دونم چطوری درستش کنم، یه راهنمایی کوچیک از طرف شما ممکنه درستش کنه (8 سال پیش)
پاسخ به سوال 
HaDiSs  8 سال پیش
+1 0

هر بار ایجاد میشه چون هنوز پترن سینگلتون رو استفاده نکردی، یه مرجع خوب برات میذارم مطالعش کن خیلیم ساده هست امیدوارم بدردت بخوره.

فقط از این پترن زمانی استفاده کن که به دفعات زیاد از یه کلاس استفاده میکنی، چون مبنای این پترن استاتیک کردن شی هست و خیلی توصیه نمیشه مگر در موارد ضروری.

link1 , link2


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .