داینامیک کردن مدیا پلیر
سلام دوستان
کی می تونه این کد رو به 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();
}
}
دقیقا متوجه نشدم لیست فایلهاتو کجا داری ولی میشه با اکشنی که کاربر انجام میده سورس مدیا پلیر رو عوض کنی :
String path = "...";
mediaPlayer.setDataSource(path + mediafile);
اگه 10 تا آهنگ داری و برای هر کدوم یه seekbar و دکمه play و ... داری به نظرم بهترین راه استفاده از یه listView هست که توی xml آداپترش، اون Seekbar و... رو میذاری و توی کدهای آداپترت، این کدهای پخش و ... رو میذاری.
اطلاعات آهنگات هم که از صفحه main میریزی توی یه آرایه و میفرستی به آداپتر لیست ویوت.
یه راه دیگه هم گذاشتن این کدها توی یه حلقه for ه 10 تایی هست که seekbar و... رو با کد کلا به صفحه اضافه کنی (که یکم سخت تره از نظر designش)
ولی راه اولی که گفتم راحت عملیه چون قبلا انجامش داده بودم.
با فرض وجود ساختار اطلاعاتی مثل
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 در نظر گرفته شده که قطعا قابل تغییره.
کلاس 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();
}
}
هر کاری می کنم ارورو ارورو بازم ارور
عاصیم کرد از صبح مشخولشم
گریه حضار :'(
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .