简单音乐播放器,实现了播放器基本功能,使用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;
}
}
}




评论