您的位置:首页 > 移动开发 > Android开发

android初学者的探索之路(Android音乐播放器二)

2015-08-16 17:12 435 查看
之前贴的在activity中写小音乐播放程序,可以直接的感受到怎么更好的使用activity生命周期譬如我想到一个需求,就是接电话,或者用户不小心按到home键,怎么回来音乐还能继续播放?就使用到onpause和onresume方法,在pause中把要保存的数据记录下来,在通过onSaveInstanceState和onRestoreInstanceState给传递给之前的状态。还有这个播放器没法脱离activity还能继续播放,该怎么办?播放器的音乐搜寻没有选择,怎么才能搜索到有MP3格式的音乐?网络音乐api怎么调用?App怎么才能跟上最新的material design设计思想?现在贴上加入service和broadcast的
public class MainActivity extends Activity implements OnClickListener,OnItemClickListener {ListView lv;RelativeLayout rLayout;Button forwButton;Button nextButton;Button stopButton;MediaPlayer mediaPlayer = new MediaPlayer();ArrayList<Music> musicList = new ArrayList<Music>();MusicApplication musicApplication;public static final String CTL_ACTION = "com.wyx.action.ctl_action";Intent intent = new Intent(CTL_ACTION);// public static final String UPDATE_ACTION="com.wyx.action.update_action";// ActivityReceiver activityReceiver;// 当前点击音乐内容的时间轴位置// int music_content_postion;// 当前点击音乐的位置int music_postion;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();putMusicToList();setMusicListToAdapter();}// public class ActivityReceiver extends BroadcastReceiver{//// @Override// public void onReceive(Context context, Intent intent) {//// }//// }// // 当当前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);musicApplication = (MusicApplication) getApplication();forwButton.setOnClickListener(this);nextButton.setOnClickListener(this);stopButton.setOnClickListener(this);lv.setOnItemClickListener(this);// activityReceiver=new ActivityReceiver();// IntentFilter intentFilter=new IntentFilter();// intentFilter.addAction(UPDATE_ACTION);// registerReceiver(activityReceiver, intentFilter);}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);}musicApplication.setMusicList(musicList);}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);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {rLayout.setVisibility(View.VISIBLE);Intent startServiceIntent = new Intent(this, MusicService.class);music_postion = position;startServiceIntent.putExtra("position", music_postion);startService(startServiceIntent);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button_forward:intent.putExtra("control", 1);break;case R.id.button_show_music:intent.putExtra("control", 2);break;case R.id.button_next:intent.putExtra("control", 3);break;default:break;}sendBroadcast(intent);}}
public class MusicApplication extends Application {ArrayList<Music> musicList = new ArrayList<Music>();public ArrayList<Music> getMusicList() {return musicList;}public void setMusicList(ArrayList<Music> musicList) {this.musicList = musicList;}@Overridepublic void onCreate() {super.onCreate();}}
public class MusicService extends Service {MediaPlayer mediaPlayer = new MediaPlayer();;ServiceReceiver serviceReceiver;// 当前点击音乐的位置int music_postion;MusicApplication musicApplication;ArrayList<Music> musicList = new ArrayList<Music>();@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {musicApplication=(MusicApplication) getApplication();musicList = musicApplication.getMusicList();Log.v("wyx", String.valueOf(musicList.get(0).getMusic_author()));Log.v("wyx", String.valueOf(music_postion));serviceReceiver = new ServiceReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(MainActivity.CTL_ACTION);registerReceiver(serviceReceiver, intentFilter);mediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer arg0) {// TODO Auto-generated method stub}});super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {music_postion=intent.getIntExtra("position",0);startMediaPlayer(music_postion);return super.onStartCommand(intent, flags, startId);}public class ServiceReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {int control = intent.getIntExtra("control", -1);switch (control) {case 1:if (music_postion == 0) {music_postion = musicList.size() - 1;startMediaPlayer(musicList.size() - 1);} else {music_postion = music_postion - 1;startMediaPlayer(music_postion);}break;case 2:if (mediaPlayer.isPlaying()) {mediaPlayer.pause();// button.setText("Start");} else {mediaPlayer.start();// button.setText("Stop");}break;case 3:if (music_postion == musicList.size() - 1) {music_postion = 0;startMediaPlayer(music_postion);} else {music_postion = music_postion + 1;startMediaPlayer(music_postion);}break;default:break;}}}@Overridepublic void onDestroy() {super.onDestroy();}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();}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: