简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片
package com.music.activity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.music.R;
import com.music.application.MyApplication;
import com.music.bean.Album;
import com.music.bean.Mp3;
import com.music.service.MusicPlayService;
import com.music.util.MusicUtils;
public class MusicMainActivity extends Activity {
private ListView listView;
private Button btn_playlist, btn_allSongs, btn_singers, btn_albums;
private TextView tv_newPlaylist;
private SimpleAdapter adapter;
boolean isReturePlaylist;
private int type = -1;
private List<Mp3> songs;// 歌曲集合
private List<String> singers;// 歌手集合
private List<String> al_playlist;// 播放列表集合
private List<Album> albums;// 专辑集合
private MusicPlayService mService;
public static final int PLAYLIST = 1;//适配器加载的数据是歌曲列表
public static final int SONGS_LIST = 2;//适配器加载的数据是歌曲列表
public static final int ALL_SINGERS_LIST = 3;//适配器加载的数据是歌手列表
public static final int ALL_ALBUMS_LIST = 4;//适配器加载的数据是专辑列表
private MyApplication application;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.music_main_activity);
application = (MyApplication) getApplication();
initView();
initListener();
}
public void initView() {
listView = (ListView) this.findViewById(R.id.listview);
btn_playlist = (Button) this.findViewById(R.id.btn_playlist);
btn_allSongs = (Button) this.findViewById(R.id.btn_allSongs);
btn_singers = (Button) this.findViewById(R.id.btn_singers);
btn_albums = (Button) this.findViewById(R.id.btn_albums);
tv_newPlaylist = (TextView) this.findViewById(R.id.tv_newPlaylist);
}
public void initListener() {
//新增列表
tv_newPlaylist.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
addplaylist();
}
});
//列出所有列表
btn_playlist.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tv_newPlaylist.setVisibility(View.VISIBLE);
al_playlist = MusicUtils.PlaylistList(MusicMainActivity.this);
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < al_playlist.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "");
map.put("songName", al_playlist.get(i));
map.put("singerName", "");
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
type = PLAYLIST;
listView.setAdapter(adapter);
}
});
//列出所有歌曲
btn_allSongs.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tv_newPlaylist.setVisibility(View.GONE);
songs = MusicUtils.getAllSongs(MusicMainActivity.this);
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < songs.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", songs.get(i).getSqlId());
map.put("songName", songs.get(i).getName());
if (songs.get(i).getSingerName().equals("<unknown>")) {
map.put("singerName", "----");
} else {
map.put("singerName", songs.get(i).getSingerName());
}
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
type = SONGS_LIST;
listView.setAdapter(adapter);
}
});
//列出所有歌手
btn_singers.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tv_newPlaylist.setVisibility(View.GONE);
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
singers = MusicUtils.MusicSingerList(MusicMainActivity.this);
for (int i = 0; i < singers.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "");
map.put("songName", singers.get(i));
map.put("singerName", "");
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
type = ALL_SINGERS_LIST;
listView.setAdapter(adapter);
}
});
//列出所有专辑
btn_albums.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tv_newPlaylist.setVisibility(View.GONE);
albums = MusicUtils.MusicAlbumList(MusicMainActivity.this);
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < albums.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "");
map.put("songName", albums.get(i).getName());
map.put("singerName", "");
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
type = ALL_ALBUMS_LIST;
listView.setAdapter(adapter);
}
});
listView.setOnItemClickListener(new OnItemClickListener() {
private List<Map<String, Object>> listItems;
Intent it = new Intent();
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
switch (type) {
case PLAYLIST:
isReturePlaylist = true;
it.putExtra("position", position);
it.setClass(MusicMainActivity.this, PlaylistSongActivity.class);
startActivity(it);
break;
case SONGS_LIST:
if(null == mService){
mService = application.getmService();
}
mService.setCurrentListItme(position);
mService.setSongs(songs);
mService.playMusic(songs.get(position).getUrl());
it.setClass(MusicMainActivity.this, MusicPlayActivity.class);
startActivity(it);
break;
case ALL_SINGERS_LIST:
songs = MusicUtils.MusicMp3ListbySinger(MusicMainActivity.this, singers.get(position));
listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < songs.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "");
map.put("songName", songs.get(i).getName());
map.put("singerName", "");
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
type = SONGS_LIST;
listView.setAdapter(adapter);
break;
case ALL_ALBUMS_LIST:
songs = MusicUtils.MusicMp3ListbyAlbum(MusicMainActivity.this, albums.get(position).getName());
listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < songs.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "");
map.put("songName", songs.get(i).getName());
map.put("singerName", "");
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
type = SONGS_LIST;
listView.setAdapter(adapter);
break;
}
}
});
}
/**
* 新建列表
*/
public void addplaylist() {
final EditText inputServer = new EditText(MusicMainActivity.this);
AlertDialog.Builder builder = new AlertDialog.Builder(MusicMainActivity.this);
builder.setTitle("Input Name").setIcon(android.R.drawable.ic_dialog_info).setView(inputServer).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String name = inputServer.getText().toString().trim();
if (!TextUtils.isEmpty(name)) {
ContentResolver resolver = getContentResolver();
int id = idForplaylist(name);
Uri uri;
if (id >= 0) {
uri = ContentUris.withAppendedId(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, id);
MusicUtils.clearPlaylist(MusicMainActivity.this, id);
} else {
ContentValues values = new ContentValues(1);
values.put(MediaStore.Audio.Playlists.NAME, name);
uri = resolver.insert(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, values);
}
setResult(RESULT_OK, (new Intent()).setData(uri));
isReturePlaylist = true;
Intent it = new Intent();
it.putExtra("playListName", name);
it.putExtra("autoAddSong", true);
it.setClass(MusicMainActivity.this, PlaylistSongActivity.class);
startActivity(it);
} else {
Toast.makeText(getApplicationContext(), "Name cannot be empty", Toast.LENGTH_SHORT).show();
return;
}
}
});
builder.create().show();
}
/**
* 通过列表名得到列表id
*/
private int idForplaylist(String name) {
Cursor c = MusicUtils.query(this, MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Playlists._ID }, MediaStore.Audio.Playlists.NAME "=?",
new String[] { name }, MediaStore.Audio.Playlists.NAME);
int id = -1;
if (c != null) {
c.moveToFirst();
if (!c.isAfterLast()) {
id = c.getInt(0);
}
c.close();
}
return id;
}
@Override
protected void onResume() {
super.onResume();
//这里要重新刷新列表,因为跳到列表歌曲界面时可能把这个列表删了,
//所有再跳回来当然要刷新,另外新建列表再回来肯定要刷新的
if (isReturePlaylist) {
al_playlist = MusicUtils.PlaylistList(MusicMainActivity.this);
List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < al_playlist.size(); i ) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", al_playlist.get(i));
map.put("songName", "");
map.put("singerName", "");
listItems.add(map);
}
adapter = new SimpleAdapter(MusicMainActivity.this, listItems, R.layout.item4music_main_activity, new String[] { "id", "songName", "singerName" }, new int[] { R.id.tv_id,
R.id.tv_songName, R.id.tv_singerName });
listView.setAdapter(adapter);
isReturePlaylist = false;
}
}
}
资源文件列表
MusicPlayerDemo/.classpath , 459
MusicPlayerDemo/.project , 851
MusicPlayerDemo/.settings/org.eclipse.core.resources.prefs , 57
MusicPlayerDemo/AndroidManifest.xml , 1608
MusicPlayerDemo/bin/AndroidManifest.xml , 1608
MusicPlayerDemo/bin/classes.dex , 688384
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity$1.class , 875
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity$2.class , 912
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity$3.class , 3521
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity$4.class , 853
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity$5.class , 850
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity$6.class , 2196
MusicPlayerDemo/bin/classes/com/music/activity/AddSong2PlaylistActivity.class , 6009
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$1.class , 813
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$2.class , 2671
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$3.class , 2996
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$4.class , 2676
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$5.class , 2751
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$6.class , 4789
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$7.class , 891
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity$8.class , 3368
MusicPlayerDemo/bin/classes/com/music/activity/MusicMainActivity.class , 8224
MusicPlayerDemo/bin/classes/com/music/activity/MusicPlayActivity$1.class , 1697
MusicPlayerDemo/bin/classes/com/music/activity/MusicPlayActivity$2.class , 1224
MusicPlayerDemo/bin/classes/com/music/activity/MusicPlayActivity$3.class , 956
MusicPlayerDemo/bin/classes/com/music/activity/MusicPlayActivity$4.class , 957
MusicPlayerDemo/bin/classes/com/music/activity/MusicPlayActivity$5.class , 1306
MusicPlayerDemo/bin/classes/com/music/activity/MusicPlayActivity.class , 4132
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$1.class , 851
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$2.class , 888
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$3.class , 1128
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$4$1.class , 1348
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$4$2.class , 938
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$4.class , 1819
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$5$1.class , 1717
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$5$2.class , 938
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$5.class , 1827
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$6.class , 1237
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$7.class , 1128
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$8.class , 826
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$9$1.class , 2600
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$9$2.class , 981
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity$9.class , 3301
MusicPlayerDemo/bin/classes/com/music/activity/PlaylistSongActivity.class , 8429
MusicPlayerDemo/bin/classes/com/music/adapter/ListViewAdapter$ViewHolder.class , 874
MusicPlayerDemo/bin/classes/com/music/adapter/ListViewAdapter.class , 4657
MusicPlayerDemo/bin/classes/com/music/application/MyApplication$1.class , 1780
MusicPlayerDemo/bin/classes/com/music/application/MyApplication.class , 1691
MusicPlayerDemo/bin/classes/com/music/bean/Album.class , 1000
MusicPlayerDemo/bin/classes/com/music/bean/Mp3.class , 2870
MusicPlayerDemo/bin/classes/com/music/BuildConfig.class , 327
MusicPlayerDemo/bin/classes/com/music/R$attr.class , 313
MusicPlayerDemo/bin/classes/com/music/R$dimen.class , 434
MusicPlayerDemo/bin/classes/com/music/R$drawable.class , 788
MusicPlayerDemo/bin/classes/com/music/R$id.class , 1510
MusicPlayerDemo/bin/classes/com/music/R$layout.class , 662
MusicPlayerDemo/bin/classes/com/music/R$menu.class , 361
MusicPlayerDemo/bin/classes/com/music/R$string.class , 445
MusicPlayerDemo/bin/classes/com/music/R$style.class , 404
MusicPlayerDemo/bin/classes/com/music/R.class , 583
MusicPlayerDemo/bin/classes/com/music/service/MusicPlayService$1.class , 871
MusicPlayerDemo/bin/classes/com/music/service/MusicPlayService$LocalBinder.class , 647
MusicPlayerDemo/bin/classes/com/music/service/MusicPlayService.class , 4774
MusicPlayerDemo/bin/classes/com/music/util/ImageLoader$BitmapDisplayer.class , 1297
MusicPlayerDemo/bin/classes/com/music/util/ImageLoader$PhotosLoader.class , 1984
MusicPlayerDemo/bin/classes/com/music/util/ImageLoader$PhotoToLoad.class , 684
MusicPlayerDemo/bin/classes/com/music/util/ImageLoader.class , 6336
MusicPlayerDemo/bin/classes/com/music/util/MemoryCache.class , 3634
MusicPlayerDemo/bin/classes/com/music/util/MusicUtils.class , 13244
MusicPlayerDemo/bin/dexedLibs/android-support-v4-a2eb397eeb6c519009396122cd48a25c.jar , 211326
MusicPlayerDemo/bin/jarlist.cache , 120
MusicPlayerDemo/bin/MusicPlayerDemo.apk , 4760988
MusicPlayerDemo/bin/resources.ap_ , 4523339
MusicPlayerDemo/bin/res/drawable-hdpi/audioplayernoartwork.png , 163875
MusicPlayerDemo/bin/res/drawable-hdpi/bat_up.png , 33188
MusicPlayerDemo/bin/res/drawable-hdpi/bg2.png , 133855
MusicPlayerDemo/bin/res/drawable-hdpi/button_back.png , 5003
MusicPlayerDemo/bin/res/drawable-hdpi/button_start.png , 9503
MusicPlayerDemo/bin/res/drawable-hdpi/delete_01.png , 1547
MusicPlayerDemo/bin/res/drawable-hdpi/ic_launcher.png , 9355
MusicPlayerDemo/bin/res/drawable-hdpi/music_add.png , 2549
MusicPlayerDemo/bin/res/drawable-hdpi/music_add_disable.png , 2549
MusicPlayerDemo/bin/res/drawable-hdpi/next_bt.png , 652
MusicPlayerDemo/bin/res/drawable-hdpi/pause_bt.png , 140
MusicPlayerDemo/bin/res/drawable-hdpi/play_bt.png , 771
MusicPlayerDemo/bin/res/drawable-hdpi/previous_bt.png , 656
MusicPlayerDemo/bin/res/drawable-mdpi/ic_launcher.png , 3112
MusicPlayerDemo/bin/res/drawable-xhdpi/ic_launcher.png , 9355
MusicPlayerDemo/bin/res/drawable-xxhdpi/ic_launcher.png , 17889
MusicPlayerDemo/gen/com/music/BuildConfig.java , 151
MusicPlayerDemo/gen/com/music/R.java , 5488
MusicPlayerDemo/ic_launcher-web.png , 51394
MusicPlayerDemo/libs/android-support-v4.jar , 556198
MusicPlayerDemo/proguard-project.txt , 781
MusicPlayerDemo/project.properties , 563
MusicPlayerDemo/res/drawable-hdpi/audioplayernoartwork.png , 168448
MusicPlayerDemo/res/drawable-hdpi/bat_up.png , 29045
MusicPlayerDemo/res/drawable-hdpi/bg2.png , 136611
MusicPlayerDemo/res/drawable-hdpi/button_back.png , 11502
MusicPlayerDemo/res/drawable-hdpi/button_start.png , 12206
MusicPlayerDemo/res/drawable-hdpi/delete_01.png , 2856
MusicPlayerDemo/res/drawable-hdpi/ic_launcher.png , 12516
MusicPlayerDemo/res/drawable-hdpi/music_add.png , 3815
MusicPlayerDemo/res/drawable-hdpi/music_add_disable.png , 3799
MusicPlayerDemo/res/drawable-hdpi/next_bt.png , 3399
MusicPlayerDemo/res/drawable-hdpi/pause_bt.png , 2927
MusicPlayerDemo/res/drawable-hdpi/play_bt.png , 3489
MusicPlayerDemo/res/drawable-hdpi/previous_bt.png , 3386
MusicPlayerDemo/res/drawable-mdpi/ic_launcher.png , 3777
MusicPlayerDemo/res/drawable-xhdpi/ic_launcher.png , 12516
MusicPlayerDemo/res/drawable-xxhdpi/ic_launcher.png , 24777
MusicPlayerDemo/res/layout/addsong2playlist.xml , 3433
MusicPlayerDemo/res/layout/item4music_main_activity.xml , 1166
MusicPlayerDemo/res/layout/item4playlist_song_activity.xml , 1585
MusicPlayerDemo/res/layout/musicitme.xml , 390
MusicPlayerDemo/res/layout/music_main_activity.xml , 1911
MusicPlayerDemo/res/layout/music_play.xml , 3240
MusicPlayerDemo/res/layout/playlist_songs.xml , 5000
MusicPlayerDemo/res/layout/pl_songs_add.xml , 2540
MusicPlayerDemo/res/menu/main.xml , 263
MusicPlayerDemo/res/values-sw600dp/dimens.xml , 203
MusicPlayerDemo/res/values-sw720dp-land/dimens.xml , 277
MusicPlayerDemo/res/values-v11/styles.xml , 334
MusicPlayerDemo/res/values-v14/styles.xml , 391
MusicPlayerDemo/res/values/dimens.xml , 220
MusicPlayerDemo/res/values/strings.xml , 232
MusicPlayerDemo/res/values/styles.xml , 697
MusicPlayerDemo/src/com/music/activity/AddSong2PlaylistActivity.java , 6050
MusicPlayerDemo/src/com/music/activity/MusicMainActivity.java , 11961
MusicPlayerDemo/src/com/music/activity/MusicPlayActivity.java , 4138
MusicPlayerDemo/src/com/music/activity/PlaylistSongActivity.java , 9651
MusicPlayerDemo/src/com/music/adapter/ListViewAdapter.java , 3935
MusicPlayerDemo/src/com/music/application/MyApplication.java , 1385
MusicPlayerDemo/src/com/music/bean/Album.java , 560
MusicPlayerDemo/src/com/music/bean/Mp3.java , 2011
MusicPlayerDemo/src/com/music/service/MusicPlayService.java , 4907
MusicPlayerDemo/src/com/music/util/ImageLoader.java , 5428
MusicPlayerDemo/src/com/music/util/MemoryCache.java , 2544
MusicPlayerDemo/src/com/music/util/MusicUtils.java , 16316
