안 드 로 이 드 응용 개발-MP3 음악 재생 기 코드 구현(1)

필요 1:메모리 카드 의 MP3 음악 을 읽 어 목록 에 표시 합 니 다.
1.데이터베이스 에서 모든 음악 데 이 터 를 조회 하여 List 집합 에 저장 합 니 다.List 에 저 장 된 것 은 Mp3Info 대상 입 니 다.
2.반복 List 집합,각각 Mp3Info 대상 의 모든 속성 을 Map 대상 에 저장
3.List 집합 을 정의 하고 맵 대상 을 List 집합 에 추가 합 니 다.
4.SimpleAdpter 를 정의 하여 setAdpter 방법 을 호출 하여 목록 에 데 이 터 를 표시 합 니 다.

/** 
*               ,   List   
* 
* @return 
*/ 
public List<Mp3Info> getMp3Infos() { 
  Cursor cursor = getContentResolver().query( 
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, 
    MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 
  List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>(); 
  for (int i = 0; i < cursor.getCount(); i++) { 
    Mp3Info mp3Info = new Mp3Info(); 
    cursor.moveToNext(); 
    long id = cursor.getLong(cursor 
      .getColumnIndex(MediaStore.Audio.Media._ID));  //  id 
    String title = cursor.getString((cursor  
      .getColumnIndex(MediaStore.Audio.Media.TITLE)));//     
    String artist = cursor.getString(cursor 
      .getColumnIndex(MediaStore.Audio.Media.ARTIST));//    
    long duration = cursor.getLong(cursor 
      .getColumnIndex(MediaStore.Audio.Media.DURATION));//   
    long size = cursor.getLong(cursor 
      .getColumnIndex(MediaStore.Audio.Media.SIZE)); //     
    String url = cursor.getString(cursor 
      .getColumnIndex(MediaStore.Audio.Media.DATA));       //     
  int isMusic = cursor.getInt(cursor 
    .getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//      
  if (isMusic != 0) {   //            
    mp3Info.setId(id); 
    mp3Info.setTitle(title); 
    mp3Info.setArtist(artist); 
    mp3Info.setDuration(duration); 
    mp3Info.setSize(size); 
    mp3Info.setUrl(url); 
    mp3Infos.add(mp3Info); 
    } 
  } 
return mp3Infos; 
} 


/** 
   *      
   * @param mp3Infos 
   */ 
  public void setListAdpter(List<Mp3Info> mp3Infos) { 
    List<HashMap<String, String>> mp3list = new ArrayList<HashMap<String, String>>(); 
    for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) { 
      Mp3Info mp3Info = (Mp3Info) iterator.next(); 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("title", mp3Info.getTitle()); 
      map.put("Artist", mp3Info.getArtist()); 
      map.put("duration", String.valueOf(mp3Info.getDuration())); 
      map.put("size", String.valueOf(mp3Info.getSize())); 
      map.put("url", mp3Info.getUrl()); 
      mp3list.add(map); 
    } 
    mAdapter = new SimpleAdapter(this, mp3list, 
        R.layout.music_list_item_layout, new String[] { "title", "Artist", "duration" }, 
        new int[] { R.id.music_title, R.id.music_Artist, R.id.music_duration }); 
    mMusiclist.setAdapter(mAdapter);   
  } 

구현 효 과 는 그림:
  
필요 2:목록 의 모든 항목 을 클릭 하고 서 비 스 를 시작 하여 음악 을 재생 합 니 다.
1.   등록 항목 클릭 모니터 OnItemClickListener
2.   OnItemClickListener 인 터 페 이 스 를 실현 하 는 내부 클래스 정의
3.   계승 서비스의 서비스 클래스 를 정의 합 니 다.PlayerServie
1.   등록 항목 클릭 모니터 OnItemClickListener

mMusiclist = (ListView) findViewById(R.id.music_list); 
    mMusiclist.setOnItemClickListener(new MusicListItemClickListener()); 
    mp3Infos = getMp3Infos(); 
    setListAdpter(getMp3Infos()); 
2.   OnItemClickListener 인 터 페 이 스 를 실현 하 는 내부 클래스 정의

private class MusicListItemClickListener implements OnItemClickListener { 
  @Override 
  public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
    if(mp3Infos != null) { 
      Mp3Info mp3Info = mp3Infos.get(position); 
      Log.d("mp3Info-->", mp3Info.toString()); 
      Intent intent = new Intent(); 
      intent.putExtra("url", mp3Info.getUrl());     
      intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG); 
      intent.setClass(MainActivity.this, PlayerService.class); 
      startService(intent);    //     
    } 
  } 
} 
3.   서 비 스 를 계승 하 는 서비스 클래스 PlayerServie(미 비 한 서비스 클래스)를 정의 합 니 다.

package com.wwj.sb.service; 
 
 
import android.annotation.SuppressLint; 
import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.os.IBinder; 
 
import com.wwj.sb.domain.AppConstant; 
 
@SuppressLint("NewApi") 
public class PlayerService extends Service { 
  private MediaPlayer mediaPlayer = new MediaPlayer();    //        
  private String path;            //       
  private boolean isPause;          //     
   
  @Override 
  public IBinder onBind(Intent arg0) { 
    return null; 
  } 
   
  @Override 
  public int onStartCommand(Intent intent, int flags, int startId) { 
    if(mediaPlayer.isPlaying()) { 
      stop(); 
    } 
    path = intent.getStringExtra("url");     
    int msg = intent.getIntExtra("MSG", 0); 
    if(msg == AppConstant.PlayerMsg.PLAY_MSG) { 
      play(0); 
    } else if(msg == AppConstant.PlayerMsg.PAUSE_MSG) { 
      pause(); 
    } else if(msg == AppConstant.PlayerMsg.STOP_MSG) { 
      stop(); 
    } 
    return super.onStartCommand(intent, flags, startId); 
  } 
   
 
  /** 
   *      
   * @param position 
   */ 
  private void play(int position) { 
    try { 
      mediaPlayer.reset();//             
      mediaPlayer.setDataSource(path); 
      mediaPlayer.prepare(); //     
      mediaPlayer.setOnPreparedListener(new PreparedListener(position));//        
    } 
    catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
   
  /** 
   *      
   */ 
  private void pause() { 
    if (mediaPlayer != null && mediaPlayer.isPlaying()) { 
      mediaPlayer.pause(); 
      isPause = true; 
    } 
  } 
   
  /** 
   *      
   */ 
  private void stop(){ 
    if(mediaPlayer != null) { 
      mediaPlayer.stop(); 
      try { 
        mediaPlayer.prepare(); //    stop         start    ,      prepare   
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
   
   
  @Override 
  public void onDestroy() { 
    if(mediaPlayer != null){ 
      mediaPlayer.stop(); 
      mediaPlayer.release(); 
    } 
  } 
  /** 
   * 
   *     OnPrepareLister  ,              
   * 
   */ 
  private final class PreparedListener implements OnPreparedListener { 
    private int positon; 
     
    public PreparedListener(int positon) { 
      this.positon = positon; 
    } 
     
    @Override 
    public void onPrepared(MediaPlayer mp) { 
      mediaPlayer.start();  //     
      if(positon > 0) {  //           
        mediaPlayer.seekTo(positon); 
      } 
    } 
  } 
   
} 
상기 코드 는 두 가지 요 구 를 실현 하여 음악 목록 을 표시 하고 목록 을 실현 하 며 이 벤트 를 클릭 하여 Servic 를 시작 합 니 다.다음 에는 음악 재생 을 통제 하 는 수 요 를 실현 할 것 이다.여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기