简单介绍一下自己,二流大学毕业,cs专业,为了找工作学习android,一直不能入门,觉得光看书不行,还是的写代码。
于是我想到一个项目可以把android的知识点串联起来,音乐播放器。
1.activity ,各种界面
2.contentprovider,从手机上读取本地音乐
3.service,音乐播放写在service中,即使没有界面也可以放
4.broadcastreceiver,activity和service的数据传递,用intent,但是的用sendbroadcast传送最好
5.mediaplay,实现音乐的播放暂停,等操作
由于本人水品有限,一切都在摸索中,先贴上没有用service和broadcastreceiver的音乐播放器的代码。
public class MainActivity extends ActionBarActivity {
ListView lv;
RelativeLayout rLayout;
Button forwButton;
Button nextButton;
Button stopButton;
MediaPlayer mediaPlayer = new MediaPlayer();
ArrayList<Music> musicList = new ArrayList<Music>();
// 当前点击音乐内容的时间轴位置
int music_content_postion;
// 当前点击音乐的位置
int music_postion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
putMusicToList();
setMusicListToAdapter();
musicEvent();
}
// 当当前activity状态破坏时保存变量,以便恢复时使用
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("music_postion", music_postion);
outState.putInt("music_content_postion", music_content_postion);
}
// 以便恢复时使用
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
this.music_postion = savedInstanceState.getInt("music_postion");
this.music_content_postion = savedInstanceState
.getInt("music_content_postion");
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer.isPlaying()) {
music_content_postion = mediaPlayer.getCurrentPosition();
mediaPlayer.stop();
}
}
@Override
protected void onResume() {
super.onResume();
if (music_content_postion > 0) {
if (music_postion == 0) {
startMediaPlayer(1);
} else {
startMediaPlayer(music_postion);
mediaPlayer.seekTo(music_content_postion);
music_content_postion = 0;
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.release();
}
private void initView() {
lv = (ListView) findViewById(R.id.listView_show_music);
forwButton = (Button) findViewById(R.id.button_forward);
nextButton = (Button) findViewById(R.id.button_next);
stopButton = (Button) findViewById(R.id.button_show_music);
rLayout = (RelativeLayout) findViewById(R.id.con_music);
}
private void putMusicToList() {
// 用contentresolver获得音乐
Cursor cursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
null);
while (cursor.moveToNext()) {
Music music = new Music();
String musicName = cursor.getString(cursor
.getColumnIndex(Media.DISPLAY_NAME));
music.setMusic_name(musicName);
byte[] musicPath = cursor
.getBlob(cursor.getColumnIndex(Media.DATA));
music.setMusic_path(new String(musicPath, 0, musicPath.length - 1));
String musicAut = cursor.getString(cursor
.getColumnIndex(Media.ARTIST));
music.setMusic_author(musicAut);
musicList.add(music);
}
}
private void setMusicListToAdapter() {
List<Map<String, Object>> listitems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < musicList.size(); i++) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("name", musicList.get(i).getMusic_name());
item.put("author", musicList.get(i).getMusic_author());
listitems.add(item);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listitems,
R.layout.line, new String[] { "name", "author" }, new int[] {
R.id.textView_name, R.id.textView_author });
lv.setAdapter(simpleAdapter);
}
private void musicEvent() {
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
rLayout.setVisibility(View.VISIBLE);
music_postion = position;
startMediaPlayer(position);
}
});
stopButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Button button = (Button) v;
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
button.setText("Start");
} else {
mediaPlayer.start();
button.setText("Stop");
}
}
});
forwButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (music_postion == 0) {
music_postion=musicList.size() - 1;
startMediaPlayer(musicList.size() - 1);
} else {
music_postion=music_postion - 1;
startMediaPlayer(music_postion);
}
}
});
nextButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (music_postion == musicList.size() - 1) {
music_postion=0;
startMediaPlayer(music_postion);
} else {
music_postion=music_postion+1;
startMediaPlayer(music_postion);
}
}
});
}
private void startMediaPlayer(int position) {
try {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.reset();
mediaPlayer.setDataSource(musicList.get(position).getMusic_path());
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个仅仅是开始雏形,我会继续重构,添加代码