في هذا الشرح سنتطرق لكفية عمل تطبيق مشغل صوت او موسيقي
{ يرجي العلم ان جميع الملفات و الشرح خاضع لرخصة المشعاع الدولية
لذا غير مصرح لك بإعادة نشر المشاركة بدون ذكر المصدر }
من خلال هذا الدرس يمكنكم بناء تطبيق مشغل لجميع الملفات الصوتية في الهاتف
ما يمييز هذا التطبيق :
1- عرض جميع الملفات الصوتية التي في الهاتف بشكل تلقائي .
2- عرض عنوان الملف الصوتي و الفنان ان توفر
3- توفر ازرار تحكم مثل التالي و السابق و الإيقاف
4- توفر شريط تنقل seekbar في الملف الصوتي الواحد .
5- توفر عرض المدة الزمنية للملف الصوتي او المزة الزمية التي تم تشغيلها في الملف الصوتي
---------------------------------
ما هو غير موجود في الشرح
1- العمل في الخلفية
2- الإنتقال التلقائي للملف التالي
---------------------------------
ملاحظة لتحميل الملفات توجه لأسفل الشرح
---------------------------------
ننتقل الآن لشرح اهم الاكواد و توضيحها مع العلم انه الملف مفتوح المصدر مرفق في اخر الشرح
كلاس "صنف " الملف الصوتي
السلام عليكم و رحمة الله و بركاته
لذا غير مصرح لك بإعادة نشر المشاركة بدون ذكر المصدر }
من خلال هذا الدرس يمكنكم بناء تطبيق مشغل لجميع الملفات الصوتية في الهاتف
ما يمييز هذا التطبيق :
1- عرض جميع الملفات الصوتية التي في الهاتف بشكل تلقائي .
2- عرض عنوان الملف الصوتي و الفنان ان توفر
3- توفر ازرار تحكم مثل التالي و السابق و الإيقاف
4- توفر شريط تنقل seekbar في الملف الصوتي الواحد .
5- توفر عرض المدة الزمنية للملف الصوتي او المزة الزمية التي تم تشغيلها في الملف الصوتي
---------------------------------
ما هو غير موجود في الشرح
1- العمل في الخلفية
2- الإنتقال التلقائي للملف التالي
---------------------------------
ملاحظة لتحميل الملفات توجه لأسفل الشرح
---------------------------------
ننتقل الآن لشرح اهم الاكواد و توضيحها مع العلم انه الملف مفتوح المصدر مرفق في اخر الشرح
كلاس "صنف " الملف الصوتي
public class Song {
private long id;
private String title;
private String artist;
public Song(long songID, String songTitle, String songArtist){
id=songID;
title=songTitle;
artist=songArtist;
}
public long getID(){return id;}
public String getTitle(){return title;}
public String getArtist(){return "الفنان : "+artist;}
}
جلب جميع الملفات الصوتية public void getSongList(){
//query external audio
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
//iterate over results if valid
if(musicCursor!=null && musicCursor.moveToFirst()){
//get columns
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
}
تشغيل الملف الصوتي من خلال رقم index لل ListView المعروض بداخلها الملفات الصوتية :public void playSong(int songindex){
songPosn=songindex;
//play
player.reset();
//get song
Song playSong = songList.get(songindex);
//get id
long currSong = playSong.getID();
//set uri
Uri trackUri = ContentUris.withAppendedId(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
currSong);
//set the data source
try{
player.setDataSource(getApplicationContext(), trackUri);
}
catch(Exception e){
Log.e("MUSIC SERVICE", "Error setting data source", e);
}
try{ player.prepareAsync();}
catch (Exception Ex){Toast.makeText(MainActivity.this,"Sorry !! This file is not Support",Toast.LENGTH_SHORT).show();}
}
بناء مشغل الصوت و جعله يغيير قيم شريط الإنتقال و قيم المدة الزمنية لتشغيل الملف الصوتplayer = new MediaPlayer();
player.setWakeMode(getApplicationContext(),
PowerManager.PARTIAL_WAKE_LOCK);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
mp.start();
int mAllPosition = mp.getDuration() / 1000;
seekBar.setMax(mAllPosition);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mp != null) {
int mCurrentPosition = mp.getCurrentPosition() / 1000;
seekBar.setProgress(mCurrentPosition);
txtall.setText("" + MiliToTime(mp.getDuration()));
txtcrnt.setText("" + MiliToTime(mp.getCurrentPosition()));
txttile.setText("" + songList.get(songPosn).getTitle());
}
mHandler.postDelayed(this, 1000);
}
});
}
});
كود واجهة المشغل كاملpublic class MainActivity extends Activity {
private ArrayList songList;
private ListView songListView;
SeekBar seekBar;
TextView txtcrnt;
TextView txtall;
TextView txttile;
ImageButton btnnext;
ImageButton btnback;
ImageButton btnstop;
private MediaPlayer player;
private int songPosn;
Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
songListView = (ListView)findViewById(R.id.song_list);
seekBar=(SeekBar)findViewById(R.id.seekBar);
songList = new ArrayList();
txtall=(TextView)findViewById(R.id.txttime2);
txtcrnt=(TextView)findViewById(R.id.txttime1);
txttile=(TextView)findViewById(R.id.txttitle);
btnstop=(ImageButton)findViewById(R.id.btnstop);
btnnext=(ImageButton)findViewById(R.id.btnnext);
btnback=(ImageButton)findViewById(R.id.btnback);
getSongList();
Collections.sort(songList, new Comparator() {
public int compare(Song a, Song b) {
return a.getTitle().compareTo(b.getTitle());
}
});
SongAdapter songAdt = new SongAdapter(this, songList);
songListView.setAdapter(songAdt);
//-------------------
songPosn=0;
player = new MediaPlayer();
player.setWakeMode(getApplicationContext(),
PowerManager.PARTIAL_WAKE_LOCK);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
mp.start();
int mAllPosition = mp.getDuration() / 1000;
seekBar.setMax(mAllPosition);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mp != null) {
int mCurrentPosition = mp.getCurrentPosition() / 1000;
seekBar.setProgress(mCurrentPosition);
txtall.setText("" + MiliToTime(mp.getDuration()));
txtcrnt.setText("" + MiliToTime(mp.getCurrentPosition()));
txttile.setText("" + songList.get(songPosn).getTitle());
}
mHandler.postDelayed(this, 1000);
}
});
}
});
songListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
playSong(position);
}
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (player != null && fromUser) {
player.seekTo(progress * 1000);
}
}
});
btnstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (player != null) {
player.stop();
}
}
});
btnback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(songPosn>0)
{
songPosn=songPosn-1;
playSong(songPosn);
}
else{
Toast.makeText(MainActivity.this,"This First Song !",Toast.LENGTH_SHORT).show();
}
}
});
btnnext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(songPosn
لتحميل التطبيق كامل و مفتوح المصدر



ليست هناك تعليقات:
إرسال تعليق