亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發中如何實現一個音樂播放器功能

發布時間:2020-11-19 16:39:18 來源:億速云 閱讀:661 作者:Leah 欄目:移動開發

Android開發中如何實現一個音樂播放器功能?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

需求1:將內存卡中的MP3音樂讀取出來并顯示到列表當中

1.從數據庫中查詢所有音樂數據,保存到List集合當中,List當中存放的是Mp3Info對象

2.迭代List集合,把每一個Mp3Info對象的所有屬性,保存到Map對象當中

3.定義一個List集合,把Map對象添加到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);   
  } 

實現效果如圖:

Android開發中如何實現一個音樂播放器功能  

需求2:點擊列表的每一項,啟動一個服務來播放音樂

1.   注冊條目點擊監聽器OnItemClickListener

2.   定義一個實現OnItemClickListener接口的內部類

3.   定義一個繼承Service的服務類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<&#63;> 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.   定義一個繼承Service的服務類PlayerServie(未完善的Service類)

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); 
      } 
    } 
  } 
   
} 

關于Android開發中如何實現一個音樂播放器功能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克什克腾旗| 龙游县| 邹城市| 五大连池市| 辽阳市| 四平市| 河西区| 广德县| 资中县| 德令哈市| 关岭| 华容县| 四平市| 乌苏市| 绥宁县| 鄯善县| 会昌县| 合阳县| 沈丘县| 壶关县| 苍山县| 邢台县| 博白县| 顺义区| 郸城县| 宜城市| 沅陵县| 延长县| 共和县| 长治县| 海兴县| 南汇区| 辽宁省| 马边| 兰西县| 监利县| 凤山县| 祁连县| 文山县| 岳阳市| 承德市|