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

مدیاپلیر در اندروید استودیو(جابجا کردن فایل صوتی با جابجا کردن seekbar به صورت دستی)

شهریاری 2  9 سال پیش  9 سال پیش
0 0

سلام

راستش من میخام که وقتی کاربر با دست ، seekbar رو تغییر داد، فایل صوتی هم که داره پخش میشه، متناسب با اون تغییر کنه.

نه اینکه بخایم با دکمه ، ذره ذره جلو یا عقب ببریمش.

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
Amir  9 سال پیش
+2 0

    private MediaPlayer player;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SeekBar seek = (SeekBar) findViewById(R.id.seek);

try {
player = new MediaPlayer();
player.setDataSource("مسیر فایل");
player.prepare();
player.start();
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalStateException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}

seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {}


@Override
public void onStartTrackingTouch(SeekBar seekBar) {}


@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int duration = player.getDuration();
int time = progress * duration / 100;
player.seekTo(time);
}
});
}
پاسخ به سوال 
شهریاری 2  9 سال پیش
0 0

این کد شما جواب نمیده دوست عزیز

برای اینکه وقتی دکمه play زده میشه، باید seekbar همراه با فایل صوتی ، شروع به حرکت کنه.

برای این هدف نیاز هست که کد زیر رو بنویسیم:

 private Runnable UpdateSongTime = new Runnable() {
        public void run() {
            startTime = mediaPlayer.getCurrentPosition();

            tx1.setText(
                    String.format(
                            "%d min, %d sec",

                            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                    TimeUnit.MINUTES.toSeconds(
                                            TimeUnit.MILLISECONDS.
                                                    toMinutes((long) startTime)))
            );
            seekbar.setProgress((int) startTime);
            myHandler.postDelayed(this, 100);

        }
    };

و کد دکمه اجرا:

 buttonPlay.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "Playing sound", Toast.LENGTH_SHORT).show();
                        mediaPlayer.start();

                        finalTime = mediaPlayer.getDuration();
                        startTime = mediaPlayer.getCurrentPosition();

                        if(oneTimeOnly == 0) {
                            seekbar.setMax((int) finalTime);
                            oneTimeOnly = 1;
                        }
                        

                        seekbar.setProgress((int) startTime);
                        myHandler.postDelayed(UpdateSongTime, 100);
                        buttonPause.setEnabled(true);
                        buttonPlay.setEnabled(false);
                    }
                });

حال اگه بخایم رویدادهایی که شما گفتید رو بنویسم، اصلا پلیر ، صداش پخش نمیشه.

نمیدونم چکار کنم.

 

 

+1 0
یکی از پارامترهای ورودی متد onProgressChanged بولین fromUser هست. که یعنی اینکه خود کاربر تغییرش داده یا با استفاده از کد تغییر کرده. شما چک کنید که اگر true بود کدهای توش اجرا بشه. (9 سال پیش)
پاسخ به سوال 
شهریاری 2  9 سال پیش
0 0

کد آخرم با اصلاح کد شما این شد:

  @Override
                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                        if(fromUser) {
                   
                            mediaPlayer.seekTo(progress);
                            myHandler.postDelayed(UpdateSongTime, 100);
                        }
                    }

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