المواضيع

[تطويرتطبيق] مشغل موسيقي او صوت media player

في هذا الشرح سنتطرق لكفية عمل تطبيق مشغل صوت او موسيقي



السلام عليكم و رحمة الله و بركاته

{ يرجي العلم ان جميع الملفات و الشرح خاضع لرخصة المشعاع الدولية 

 لذا غير مصرح لك بإعادة نشر المشاركة بدون ذكر المصدر }

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

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

إرسال تعليق

عرب رويد arabroid Designed by Templateism | MyBloggerLab Copyright © 2014

صور المظاهر بواسطة richcano. يتم التشغيل بواسطة Blogger.