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

داینامیک کردن مدیا پلیر

مدیریت گفتگو
Smsbaz 12 سال پیش
آخرین تغییر: 12 سال پیش

سلام دوستان

کی می تونه این کد رو به 10 فایل تخصیص بده؟

برای پخش اهنگه و من نمی خوام هر اهنگ به تنهایی این همه کد داشته باشه

یکبار برای هر 10  ترک

خودمم هر راهی به ذهنم رسید تست کردم نشد

به نظرم بهترینش سوسچ کیس بود که بازم نشد :D

دوستان هلپ می پلیز B-)

 
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
       
        SeekBar seek_bar;
    Button play_button, pause_button;
    MediaPlayer mediaPlayer;
    TextView text_shown;
    Handler seekHandler = new Handler();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                getInit();
        seekUpdation();
        }


    public void getInit() {  
        seek_bar = (SeekBar) findViewById(R.id.seek_bar);
        play_button = (Button) findViewById(R.id.play_button);
        pause_button = (Button) findViewById(R.id.pause_button);
        text_shown = (TextView) findViewById(R.id.text_shown);
        play_button.setOnClickListener(this);
        pause_button.setOnClickListener(this);
        mediaPlayer = MediaPlayer.create(this, R.raw.my_file);
        seek_bar.setMax(mediaPlayer.getDuration());
    }

    Runnable run = new Runnable() {

        @Override
        public void run() {
            seekUpdation();
        }
    };

    public void seekUpdation() {

        seek_bar.setProgress(mediaPlayer.getCurrentPosition());
        seekHandler.postDelayed(run, 1000);
        seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
                       
                        @Override
                        public void onStopTrackingTouch(SeekBar seek_bar) {
                                // TODO Auto-generated method stub
                               
                        }
                       
                        @Override
                        public void onStartTrackingTouch(SeekBar seek_bar) {
                                // TODO Auto-generated method stub
                               
                        }
                       
                        @Override
                        public void onProgressChanged(SeekBar seek_bar, int progress, boolean fromUser) {
                                if(fromUser){
                                    mediaPlayer.seekTo(progress);
                                    seek_bar.setProgress(progress);
                                }
                               
                        }
                });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.play_button:
            text_shown.setText("Playing...");
            mediaPlayer.start();
            break;
        case R.id.pause_button:
                mediaPlayer.pause();
            text_shown.setText("Paused...");
        }
    }
   
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if(fromUser){
            mediaPlayer.seekTo(progress);
            seekBar.setProgress(progress);
        }
    }
   
   
    @Override
    public void onBackPressed() {
        mediaPlayer.stop();
        finish();
    }
     
}

نظرات

کد مرتبط با seekbar ربطی به سوال نداره. اگه کد سبک تری بذاری خوانایی بالاتری داره و مفهوم تره

پاسخ‌ها 5

محمد حسین زاده 12 سال پیش

دقیقا متوجه نشدم لیست فایلهاتو کجا داری ولی میشه با اکشنی که کاربر انجام میده سورس مدیا پلیر رو عوض کنی :

 
String path = "...";
mediaPlayer.setDataSource(path + mediafile);

نظرات

Smsbaz 12 سال پیش
خوب هر اهنگ یه سیکبار داره.در تغییراتی که خودم اعمال کردم سیک بار هم از کار میافتاد و جزو سوال منم میشه.لیست فایلها در یه پوشه در res به نام raw .میشه راجب توضیحتون بیشتر بحث کنید متوجه نشدم
sadeghbarout 12 سال پیش

اگه 10 تا آهنگ داری و برای هر کدوم یه seekbar و دکمه play و ... داری به نظرم بهترین راه استفاده از یه listView هست که توی xml آداپترش، اون Seekbar و... رو میذاری و توی کدهای آداپترت، این کدهای پخش و ... رو میذاری.

اطلاعات آهنگات هم که از صفحه main میریزی توی یه آرایه و میفرستی به آداپتر لیست ویوت.

یه راه دیگه هم گذاشتن این کدها توی یه حلقه for ه 10 تایی هست که seekbar و... رو با کد کلا به صفحه اضافه کنی (که یکم سخت تره از نظر designش)

ولی راه اولی که گفتم راحت عملیه چون قبلا انجامش داده بودم.

نظرات

Smsbaz 12 سال پیش
داداش قبلا انجام دادی الان کدشو نداری؟واقعا خستم کرده
PandaStudio 12 سال پیش
به نظر من هم این روش خوبیه میتونی تو آدابتر آیتم های لیست ویوت متغیری برای ذخیره آدرس آهنگ ها داشته باشی و روی اون مانور بدی اگه activity filechooser را گوگل کنی نمونه کد خوبی بت میده
Smsbaz 12 سال پیش
توی لیست ویو هرکاری کردم نتونستم جمو جورش کنم
sadeghbarout 12 سال پیش
خب دیگه من دیر رسیدم ! آقا محمد کدهاشو گذاشتن ;)
محمد حسین زاده 12 سال پیش

با فرض وجود ساختار اطلاعاتی مثل

 public class StructSong {
public String name;
public String path;

public StructSong(String _name, String _path) {
name=_name;
path=_path;
}
}

که قابل استفاده تو لیست ویو و یا هر منطق دیگه ای هم هست و کلاس FakeData با وظیفه ساخت لیست درون حافظه ای از ساختار بالا، میتونی از کلاس زیر استفاده کنی :

 public class MediaManager {
private MediaPlayer mediaPlayer;
private AssetManager assets;
private SeekBar seekBar;
private Runnable UpdateSongTime = new Runnable() {
public void run() {
int startTime = mediaPlayer.getCurrentPosition();
if (seekBar != null)
seekBar.setProgress(startTime);
G.handler.postDelayed(this, 100);
}
};

public MediaManager(AssetManager _assets, SeekBar _seekBar) {
assets = _assets;
seekBar = _seekBar;
mediaPlayer = new MediaPlayer();
}

public void setCurrentPosition(int position) {
reset();
if (position < 0)
position = 0;
if (position >= FakeData.songs.size())
position = FakeData.songs.size() - 1;
FakeData.currentPosition = position;
StructSong song = FakeData.songs.get(position);
try {
AssetFileDescriptor afd = assets.openFd(song.path);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
start();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}

public void moveCurrentPosition(int count) {
setCurrentPosition(FakeData.currentPosition + count);
}

public void pause() {
mediaPlayer.pause();
}

public void start() {
mediaPlayer.start();
if (seekBar != null)
{
seekBar.setMax(mediaPlayer.getDuration());
G.handler.postDelayed(UpdateSongTime, 100);
}
}

public void reset() {
mediaPlayer.reset();
}

public void stop() {
mediaPlayer.pause();
mediaPlayer.seekTo(0);
}
}

setCurrentPosition برای تعیین فایل با توجه به موقعیتش تو لیست ساخته شده در کلاس FakeData

moveCurrentPosition برای تغییر موقعیت فایل. کاراییش تو دکمه های قبلی و بعدی که با مقادیر 1و-1 فراخونی میشه.

اگه نقاط مبهمی تو کد بود بگو که توضیح بدم. مکان فایل ها هم assets در نظر گرفته شده که قطعا قابل تغییره.

نظرات

Smsbaz 12 سال پیش
دمت گرم و مچکر.فقط من یکم گیج میزنم.فراخونیش چجوریه؟
تو اکتیویتی خودت یه نمونه ازش با پارامتر های مورد نیاز میسازی و با همون هم کار میکنی. دیگه نمونه ای از MediaPlayer نمیسازی
Smsbaz 12 سال پیش
و fakedata? :D
گفتم بالا. وظیفش ایجاد لیستی از StructSong هستش. مثلا اگه داری از دیتابیس اطلاعات رو میخونی با یه لیست برگشتی از دیتا بیس جایگزینش میکنی . اگه دیتابیس در کار نیست و همه چیز ثابته خودت یه لیست دستی میسازی. پایین کد کلاسش رو میزارم
محمد حسین زاده 12 سال پیش

کلاس FakeData :

 public class FakeData {

public static ArrayList<StructSong> songs = new ArrayList<StructSong>();

public static int currentPosition = 0;

public static AdapterSongs adapter;

public static void init() {

for (int i = 1; i < 10; i++) {

songs.add(new StructSong("Song #" + i, "0" + i + ".MP3"));
}

adapter = new AdapterSongs(songs);

adapter.notifyDataSetChanged();
}
}

نظرات

Smsbaz 12 سال پیش
خیلی خیلی ممنونم.تست میکنم.مشکلی بود بازم زحمت میدم
Smsbaz 12 سال پیش

هر کاری می کنم ارورو ارورو بازم ارور

عاصیم کرد از صبح مشخولشم

گریه حضار :'(

نظرات


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