في هذا الشرح سنتطرق لكفية عمل تطبيق مشغل صوت او موسيقي
{ يرجي العلم ان جميع الملفات و الشرح خاضع لرخصة المشعاع الدولية
لذا غير مصرح لك بإعادة نشر المشاركة بدون ذكر المصدر }
من خلال هذا الدرس يمكنكم بناء تطبيق مشغل لجميع الملفات الصوتية في الهاتف
ما يمييز هذا التطبيق :
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 ArrayListsongList; 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
لتحميل التطبيق كامل و مفتوح المصدر
ليست هناك تعليقات:
إرسال تعليق