简单介绍一下自己,二流大学毕业,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 musicList = new ArrayList();// 当前点击音乐内容的时间轴位置int music_content_postion;// 当前点击音乐的位置int music_postion;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();putMusicToList();setMusicListToAdapter();musicEvent();}// 当当前activity状态破坏时保存变量,以便恢复时使用@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("music_postion", music_postion);outState.putInt("music_content_postion", music_content_postion);}// 以便恢复时使用@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);this.music_postion = savedInstanceState.getInt("music_postion");this.music_content_postion = savedInstanceState.getInt("music_content_postion");}@Overrideprotected void onPause() {super.onPause();if (mediaPlayer.isPlaying()) {music_content_postion = mediaPlayer.getCurrentPosition();mediaPlayer.stop();}}@Overrideprotected 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;}}}@Overrideprotected 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> listitems = new ArrayList>();for (int i = 0; i < musicList.size(); i++) {Map item = new HashMap();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() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {rLayout.setVisibility(View.VISIBLE);music_postion = position;startMediaPlayer(position);}});stopButton.setOnClickListener(new OnClickListener() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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();}}}

这个仅仅是开始雏形,我会继续重构,添加代码

更多相关文章

  1. android通过代码来开启和关闭移动网络
  2. [android][利用JNI技术在Android中调用、调试C++代码]
  3. 【Android 开发】: Android 消息处理机制之三: Handler 中 sendM
  4. 获取Android SDK 源代码并在Eclipse中关联查看的方法

随机推荐

  1. Android MediaScanner总结
  2. android 最顶部状态栏--文字颜色和背景颜
  3. Android(安卓)重读官方文档 4 SharedPref
  4. Android三种常用动画分享(转)
  5. Android独立闹钟实现
  6. 支付宝
  7. Android EditText 禁止点击 弹键盘
  8. Android 使用后台线程
  9. Android GMS Crash 优化方案
  10. Broadcast使用场景解读