Android 音乐播放器
来源:互联网 发布:闲鱼淘宝介入偏向买家 编辑:程序博客网 时间:2024/06/02 06:28
- Audio类:
package com.example.x.music;import android.os.Bundle;import android.provider.MediaStore;/** * Created by X on 2016/7/4. */public class Audio { private String mTitle, mTitleKey, mArtist, mArtistKey, mComposer, mAlbum, mAlbumKey, mDisplayName, mMimeType, mPath; private int mId, mArtistId, mAlbumId, mYear, mTrack; private int mDuration = 0, mSize = 0; private boolean isRingtone = false, isPodcast = false, isAlarm = false, isMusic = false, isNotification = false; public Audio (Bundle bundle) { mId = bundle.getInt(MediaStore.Audio.Media._ID); mTitle = bundle.getString(MediaStore.Audio.Media.TITLE); mTitleKey = bundle.getString(MediaStore.Audio.Media.TITLE_KEY); mArtist = bundle.getString(MediaStore.Audio.Media.ARTIST); mArtistKey = bundle.getString(MediaStore.Audio.Media.ARTIST_KEY); mComposer = bundle.getString(MediaStore.Audio.Media.COMPOSER); mAlbum = bundle.getString(MediaStore.Audio.Media.ALBUM); mAlbumKey = bundle.getString(MediaStore.Audio.Media.ALBUM_KEY); mDisplayName = bundle.getString(MediaStore.Audio.Media.DISPLAY_NAME); mYear = bundle.getInt(MediaStore.Audio.Media.YEAR); mMimeType = bundle.getString(MediaStore.Audio.Media.MIME_TYPE); mPath = bundle.getString(MediaStore.Audio.Media.DATA); mArtistId = bundle.getInt(MediaStore.Audio.Media.ARTIST_ID); mAlbumId = bundle.getInt(MediaStore.Audio.Media.ALBUM_ID); mTrack = bundle.getInt(MediaStore.Audio.Media.TRACK); mDuration = bundle.getInt(MediaStore.Audio.Media.DURATION); mSize = bundle.getInt(MediaStore.Audio.Media.SIZE); isRingtone = bundle.getInt(MediaStore.Audio.Media.IS_RINGTONE) == 1; isPodcast = bundle.getInt(MediaStore.Audio.Media.IS_PODCAST) == 1; isAlarm = bundle.getInt(MediaStore.Audio.Media.IS_ALARM) == 1; isMusic = bundle.getInt(MediaStore.Audio.Media.IS_MUSIC) == 1; isNotification = bundle.getInt(MediaStore.Audio.Media.IS_NOTIFICATION) == 1; } public int getId() { return mId; } public String getMimeType () { return mMimeType; } public int getDuration () { return mDuration; } public int getSize () { return mSize; } public boolean isRingtone () { return isRingtone; } public boolean isPodcast () { return isPodcast; } public boolean isAlarm () { return isAlarm; } public boolean isMusic () { return isMusic; } public boolean isNotification () { return isNotification; } public String getTitle () { return mTitle; } public String getTitleKey () { return mTitleKey; } public String getArtist () { return mArtist; } public int getArtistId () { return mArtistId; } public String getArtistKey () { return mArtistKey; } public String getComposer () { return mComposer; } public String getAlbum () { return mAlbum; } public int getAlbumId () { return mAlbumId; } public String getAlbumKey () { return mAlbumKey; } public String getDisplayName () { return mDisplayName; } public int getYear () { return mYear; } public int getTrack () { return mTrack; } public String getPath () { return mPath; }}
- MediaUtils类:
package com.example.x.music;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.os.Bundle;import android.provider.MediaStore;import java.util.ArrayList;import java.util.List;/** * Created by X on 2016/7/4. */public class MediaUtils { public static final String[] AUDIO_KEYS = new String[]{ MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.TITLE_KEY, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ARTIST_ID, MediaStore.Audio.Media.ARTIST_KEY, MediaStore.Audio.Media.COMPOSER, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.ALBUM_KEY, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.SIZE, MediaStore.Audio.Media.YEAR, MediaStore.Audio.Media.TRACK, MediaStore.Audio.Media.IS_RINGTONE, MediaStore.Audio.Media.IS_PODCAST, MediaStore.Audio.Media.IS_ALARM, MediaStore.Audio.Media.IS_MUSIC, MediaStore.Audio.Media.IS_NOTIFICATION, MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.DATA }; public static List<Audio> getAudioList(Context context) { List<Audio> audioList = new ArrayList<Audio>(); ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, AUDIO_KEYS, null, null, null); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { Bundle bundle = new Bundle (); for (int i = 0; i < AUDIO_KEYS.length; i++) { final String key = AUDIO_KEYS[i]; final int columnIndex = cursor.getColumnIndex(key); final int type = cursor.getType(columnIndex); switch (type) { case Cursor.FIELD_TYPE_BLOB: break; case Cursor.FIELD_TYPE_FLOAT: float floatValue = cursor.getFloat(columnIndex); bundle.putFloat(key, floatValue); break; case Cursor.FIELD_TYPE_INTEGER: int intValue = cursor.getInt(columnIndex); bundle.putInt(key, intValue); break; case Cursor.FIELD_TYPE_NULL: break; case Cursor.FIELD_TYPE_STRING: String strValue = cursor.getString(columnIndex); bundle.putString(key, strValue); break; } } Audio audio = new Audio (bundle); audioList.add(audio); } cursor.close(); return audioList; }}
- MP3Player类:
package com.example.x.first;import android.app.Activity;import android.content.Context;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ImageButton;import android.widget.ListView;import android.widget.SeekBar;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.example.x.first.com.x.Bean.Audio;import com.example.x.first.com.x.tools.MediaUtils;import com.example.x.first.com.x.tools.MyTools;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by X on 2016/7/4. */public class MP3Player extends Activity implements View.OnClickListener, MediaPlayer.OnCompletionListener, SeekBar.OnSeekBarChangeListener { ImageButton ibReturn; ImageButton ibVolume_down; ImageButton ibVolume_up; ImageButton ibBefore; ImageButton ibStart; ImageButton ibNext; ImageButton ibLoop_one; ImageButton ibLoop_all; TextView tvMusicTitle; SeekBar sbMusic; ListView lvMusic; List<Audio> listMusic; List<String> listMusicTitle; List<Map<String, String>> listMusicTitleMap; MediaPlayer mp; private boolean isStartMusic = false; private boolean isPause = false; private int POSITION = 0; private int CurrentPositon; private boolean isChanging = false; private boolean isLoop_one = false; private boolean isFirstStart = true; private boolean isBreakByCall = false; AudioManager mAudioManager; int maxVolume; int currentVolume; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mp3player); initView(); mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //获取当前音量 getMusicVolume(); mp = new MediaPlayer(); mp.setOnCompletionListener(this); getMusicList(); setAdapter(); } /** * 获取当前音量 */ private void getMusicVolume() { maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); System.out.println("maxVolume---->" + maxVolume); System.out.println("currentVolume---->" + currentVolume); } /** * 增大音量 */ private void upMusicVolume() { if (maxVolume == currentVolume) { Toast.makeText(this, "已是最大音量", Toast.LENGTH_SHORT).show(); } else {// currentVolume++;// mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,currentVolume,0); mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FX_FOCUS_NAVIGATION_UP); maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); System.out.println("currentVolume---->" + currentVolume); System.out.println("maxVolume---->" + maxVolume); } } /** * 减小音量 */ private void downMusicVolume() { if (0 == currentVolume) { Toast.makeText(this, "已是最小音量", Toast.LENGTH_SHORT).show(); } else {// currentVolume--;// mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,currentVolume,0); mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FX_FOCUS_NAVIGATION_UP); maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); System.out.println("currentVolume---->" + currentVolume); System.out.println("maxVolume---->" + maxVolume); } } private void setAdapter() { SimpleAdapter simpleAdapter = new SimpleAdapter(this, listMusicTitleMap, R.layout.musiclist, new String[]{"title"}, new int[]{R.id.musicTitle}); lvMusic.setAdapter(simpleAdapter); lvMusic.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { System.out.println("position---->" + position); POSITION = position; startMusic(); } }); } /** * 开始播放 */ private void startMusic() { try { String path = listMusic.get(POSITION).getPath(); String title = listMusic.get(POSITION).getTitle(); System.out.println("path---->" + path); System.out.println("title---->" + title); mp.reset(); mp.setDataSource(path); mp.prepareAsync(); mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); ibStart.setBackground(getResources().getDrawable(R.drawable.music_pause)); tvMusicTitle.setText(listMusic.get(POSITION).getTitle()); isStartMusic = true; isFirstStart = false; } }); } catch (IOException e) { e.printStackTrace(); } } /** * 获取音乐列表 */ private void getMusicList() { listMusic = MediaUtils.getAudioList(this); listMusicTitleMap = new ArrayList<>(); Map map; for (Audio audio : listMusic) { map = new HashMap(); map.put("title", audio.getTitle()); listMusicTitleMap.add(map); System.out.println("--------------------------------------------"); System.out.println("getDisplayName---->" + audio.getDisplayName()); System.out.println("getId---->" + audio.getId()); System.out.println("getAlbum---->" + audio.getAlbum()); System.out.println("getAlbumKey---->" + audio.getAlbumKey()); System.out.println("getArtist---->" + audio.getArtist()); System.out.println("getArtistKey---->" + audio.getArtistKey()); System.out.println("getPath---->" + audio.getPath()); System.out.println("getTitle---->" + audio.getTitle()); System.out.println("getSize---->" + audio.getSize()); System.out.println("getDuration---->" + audio.getDuration()); System.out.println("getYear---->" + audio.getYear()); System.out.println("getComposer---->" + audio.getComposer()); } } /** * 初始化 */ private void initView() { ibReturn = (ImageButton) findViewById(R.id.ibReturn); ibVolume_down = (ImageButton) findViewById(R.id.ibVolume_down); ibVolume_up = (ImageButton) findViewById(R.id.ibVolume_up); ibBefore = (ImageButton) findViewById(R.id.ibBefore); ibStart = (ImageButton) findViewById(R.id.ibStart); ibNext = (ImageButton) findViewById(R.id.ibNext); ibLoop_one = (ImageButton) findViewById(R.id.ibLoop_one); ibLoop_all = (ImageButton) findViewById(R.id.ibLoop_all); tvMusicTitle = (TextView) findViewById(R.id.tvMusicTitle); sbMusic = (SeekBar) findViewById(R.id.sbMusic); lvMusic = (ListView) findViewById(R.id.lvMusic); ibReturn.setOnClickListener(this); ibVolume_down.setOnClickListener(this); ibVolume_up.setOnClickListener(this); ibBefore.setOnClickListener(this); ibStart.setOnClickListener(this); ibNext.setOnClickListener(this); ibLoop_one.setOnClickListener(this); ibLoop_all.setOnClickListener(this); sbMusic.setOnSeekBarChangeListener(this); } /** * 设置监听 * * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.ibReturn: finish(); break; case R.id.ibStart: if (listMusic.size() > 0) { changeState(); } else { MyTools.showToast(this, "本地无音乐"); } break; case R.id.ibLoop_one: isLoop_one = true; Toast.makeText(this, "单曲循环", Toast.LENGTH_SHORT).show(); break; case R.id.ibLoop_all: isLoop_one = false; Toast.makeText(this, "全部循环", Toast.LENGTH_SHORT).show(); break; case R.id.ibBefore: if (listMusic.size() > 0) { beforePosition(); startMusic(); } else { MyTools.showToast(this, "本地无音乐"); } break; case R.id.ibNext: if (listMusic.size() > 0) { NextPosition(); startMusic(); } else { MyTools.showToast(this, "本地无音乐"); } break; case R.id.ibVolume_down: //减小音量 downMusicVolume(); break; case R.id.ibVolume_up: //增加音量 upMusicVolume(); break; } } /** * 播放或暂停播放 */ private void changeState() { if (mp != null) { if (!isFirstStart) { if (isStartMusic) { mp.pause(); System.out.println("暂停播放"); ibStart.setBackground(getResources().getDrawable(R.drawable.music_start)); isStartMusic = false; } else { System.out.println("继续播放"); ibStart.setBackground(getResources().getDrawable(R.drawable.music_pause)); mp.start(); isStartMusic = true; } } else { startMusic(); ibStart.setBackground(getResources().getDrawable(R.drawable.music_pause)); } } } /** * 播放完毕操作 */ @Override public void onCompletion(MediaPlayer mp) { if (isLoop_one) { startMusic(); } else { NextPosition(); startMusic(); } } /** * 下一首 */ private void NextPosition() { int i = listMusic.size(); if (POSITION < i - 1) { POSITION++; } else { POSITION = 0; } } /** * 上一首 */ private void beforePosition() { if (POSITION != 0) { POSITION--; } else { Toast.makeText(this, "已经是第一首", Toast.LENGTH_SHORT).show(); } } /** * 播放进度条 */ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mp.seekTo(progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) { isChanging = true; } @Override public void onStopTrackingTouch(SeekBar seekBar) { isChanging = false; } @Override protected void onStop() { super.onStop(); if (mp != null) { if (mp.isPlaying()) { mp.pause(); isBreakByCall = true; } } } @Override protected void onRestart() { super.onRestart(); if (isBreakByCall) { mp.start(); } } @Override protected void onDestroy() { if (mp != null) { if (mp.isPlaying()) { mp.stop(); } mp.release(); } super.onDestroy(); }}
- mp3player.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/main"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RelativeLayout android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@color/gray" android:textColor="@color/white" android:gravity="center"> <TextView android:id="@+id/timingIcon" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@color/gray" android:gravity="center" android:text="MP3播放" android:textColor="@color/white" android:textSize="50px" /> <ImageButton android:id="@+id/ibReturn" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_alignTop="@+id/timingIcon" android:background="@drawable/returnbutton" /> </RelativeLayout> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@drawable/main" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginLeft="20dp" android:text="播放列表" android:textColor="@color/white" android:textSize="40px"/> <ListView android:id="@+id/lvMusic" android:layout_width="180dp" android:layout_height="200dp" android:layout_marginLeft="20dp" ></ListView> </LinearLayout> <LinearLayout android:layout_marginRight="20dp" android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="3"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在播放" android:textColor="@color/white" android:textSize="30px" /> <TextView android:id="@+id/tvMusicTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="歌曲名1" android:textSize="40px" android:textColor="@color/blue" android:layout_marginTop="20dp" android:layout_gravity="center" /> <SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:id="@+id/sbMusic" android:layout_gravity="center_horizontal" /> <LinearLayout android:layout_marginTop="30dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageButton android:id="@+id/ibVolume_down" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_volume_down" android:layout_weight="1"/> <ImageButton android:id="@+id/ibVolume_up" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_volume_up" android:layout_weight="1"/> <ImageButton android:id="@+id/ibBefore" android:layout_marginLeft="10dp" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_before" android:layout_weight="1"/> <ImageButton android:id="@+id/ibStart" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_start" android:layout_weight="1"/> <ImageButton android:id="@+id/ibNext" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_next" android:layout_weight="1"/> <ImageButton android:id="@+id/ibLoop_one" android:layout_marginLeft="10dp" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_loop_one" android:layout_weight="1"/> <ImageButton android:id="@+id/ibLoop_all" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/music_loop_all" android:layout_weight="1"/> </LinearLayout> </LinearLayout> </LinearLayout></LinearLayout>
- musiclist.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/musicTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:layout_marginBottom="3dp" android:textColor="@color/white" android:text="aa" android:textSize="25px"/></LinearLayout>
- 权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
0 0
- android音乐播放器播放音乐卡
- Android 音乐播放 类似音乐播放器
- android 音乐播放器
- Android 音乐播放器
- android 音乐播放器
- Android音乐播放器
- Android--音乐播放器
- Android音乐播放器
- android 音乐播放器
- Android音乐播放器
- Android 音乐播放器
- Android音乐播放器
- Android音乐播放器
- Android:音乐播放器
- Android 音乐播放器。
- android 音乐播放器
- Android--音乐播放器
- android音乐播放器
- linux下上传代码到github
- Maven POM中的各种scope的行为总结
- [JavaScript]按天倒计时代码
- HDOJ 1541 Stars(树状数组)
- Emulator Control无法使用解决方法(SDK Tools版本和ADT版本不一致引起)
- Android 音乐播放器
- hdu1097 A hard puzzle
- zabbix邮箱报警设置
- freemarker学习笔记《—》
- fastjson生成和解析json数据,序列化和反序列化数据
- Sublime 字体设置
- virtio-gpu介绍
- unity树结构
- 通用工具类