بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
شهریاری 2 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام

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

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

 

نظرات

پاسخ‌ها 3

Amir 10 سال پیش

    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 10 سال پیش

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

برای اینکه وقتی دکمه 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);
                    }
                });

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

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

 

 

نظرات

Amir 10 سال پیش
یکی از پارامترهای ورودی متد onProgressChanged بولین fromUser هست. که یعنی اینکه خود کاربر تغییرش داده یا با استفاده از کد تغییر کرده. شما چک کنید که اگر true بود کدهای توش اجرا بشه.
شهریاری 2 10 سال پیش

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

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

نظرات


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