کار با مدیا پلایر
سلام من با این کد فایل ها ی mp3 رو از کارت حافظه با یک لیست ویو نشون می دم حالا می خوام یه دکمه کنار هر آیتم بزارم و با کلیک روش اهنگ پخش بشه ولی نمی دونم چجوری لطفا کمک کنید ؟ با کد ؟!
package com.hadi.player;
import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Main extends Activity {
ListView lv;
String[] items;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.lvPlayList);
ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory());
items = new String[mySongs.size()];
for (int i = 0; i < mySongs.size(); i++) {
//Toast.makeText(getApplicationContext(), mySongs.get(i).getName().toString(), Toast.LENGTH_SHORT).show();
items[i] = mySongs.get(i).getName().toString();
}
ArrayAdapter<String> adp = new ArrayAdapter<String>(getApplicationContext(), R.layout.song_layout, R.id.textView1, items);
lv.setAdapter(adp);
}
public ArrayList<File> findSongs(File root) {
ArrayList<File> al = new ArrayList<File>();
File[] files = root.listFiles();
for (File singleFile: files) {
if (singleFile.isDirectory() && !singleFile.isHidden()) {
al.addAll(findSongs(singleFile));
} else {
if (singleFile.getName().endsWith(".mp3")) {
al.add(singleFile);
}
}
}
return al;
}
}
ببینید من الان کد رو یکم تغییر دادم کا با کلیک رو هر آیتم آهنگ پخش میشه ولی چجوری یه Button توی هر آیتم بزارم و با کلیک رو این button آهنگ پخش بشه؟
public class Main extends Activity implements MediaPlayer.OnCompletionListener {
MediaPlayer mp;
ListView lv;
String[] items;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.lvPlayList);
final ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory());
items = new String[mySongs.size()];
for (int i = 0; i < mySongs.size(); i++) {
//Toast.makeText(getApplicationContext(), mySongs.get(i).getName().toString(), Toast.LENGTH_SHORT).show();
items[i] = mySongs.get(i).getName().toString();
}
ArrayAdapter<String> adp = new ArrayAdapter<String>(getApplicationContext(), R.layout.song_layout, R.id.textView1, items);
lv.setAdapter(adp);
mp = new MediaPlayer();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Uri u = Uri.parse(mySongs.get(position).toString());
mp = MediaPlayer.create(getApplicationContext(), u);
mp.start();
}
});
}
public ArrayList<File> findSongs(File root) {
ArrayList<File> al = new ArrayList<File>();
File[] files = root.listFiles();
for (File singleFile: files) {
if (singleFile.isDirectory() && !singleFile.isHidden()) {
al.addAll(findSongs(singleFile));
} else {
if (singleFile.getName().endsWith(".mp3")) {
al.add(singleFile);
}
}
}
return al;
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
}
}
دوست عزیز شما برای اینکار باید بخوبی با نحوه ی ساخت ArrayAapter آشنایی داشته باشید < پیشنهاد میکنم یکبار دیگه آموزش های استاد رو مرور کنید <<<
شما باید درون کلاس StructValue حداقل یک String داشته باشید که آدرس فایل صوتی شما رو درون خودش ذخیره کنه <
بصورت زیر آدرس تمام فایل های صوتی که دارید رو درون آرایه قرار بدید و لیست یو رو با این آداپتر بسازید <
for(int i = 0 ; i < 5 ; i++){
StructValue Mp3Files = new StructValue();
Mp3Files.fileName = "File Number_ " + i;
Mp3Files.fileUrl = "www.localhost.com/file_" + i + ".mp3";
G.arrayStructValue.add(Mp3Files);
adapter = new AdapterValue(G.arrayStructValue);
lstContent.setAdapter(adapter);
}
با کد بالا لیست ویو شما 5 آیتم خواهد داشت
حالا در متد Fill در کلاس AdapterValue میتونید به مقدار لینک فایل صوتی دسترسی داشته باشید <
کافیه توی آیتم یک Button داشته باشید و توی onClickListener اون بصورت زیر مقدار رو بگیرید تا به لینک فایل صوتی دسترسی پیدا کنید <
String URL = item.fileUrl
Log.i("LOG","" + URL);
با کلیک کردن روی Button موجود در هر آیتم لینک مربوط به اون آیتم رو میگیرد < و میتونید توی لاگ این رو متوجه بشید <
لیست ویو این خاصیت رو داره که برای هر Item یک URL رو به ترتیبی که از قبل Adapter رو ساختید مقدار مربوطه رو اختصاص بده < پس اگر بخواید ترتیب قرار گرفتن لینک ها در لیست ویو متفاوت بشه ، مثلا از اخر به اول کافیه دستور For رو برعکس کنید <
for(int i = 4 ; i >= 0 ; i--){
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .