09-10 MediaPlayer
2015-09-10 22:09
190 查看
MediaPlayer
//**activity_main.xml** <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_weight="1" android:layout_height="wrap_content"></ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="bottom"> <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/textview_nowtime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp"/> <TextView android:id="@+id/textview_alltime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp"/> </LinearLayout> </LinearLayout> </LinearLayout> //**music_list.xml** <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <ImageView android:id="@+id/image_header" android:layout_width="80dp" android:layout_height="80dp" android:layout_gravity="left"/> <TextView android:id="@+id/textview_artist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left"/> <TextView android:id="@+id/textview_music" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> //**Config(静态常量类)** public class Config { public static final int MUSIC_START=0; public static final int MUSIC_SEEKTO=1; } //MusicAdapter(class文件) public class MusicAdapter extends BaseAdapter{ private LayoutInflater mInflater; public MusicAdapter(LayoutInflater mInflater, File[] musicFiles) { this.mInflater = mInflater; this.musicFiles = musicFiles; } private File[] musicFiles; @Override public int getCount() { return musicFiles.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder=null; if(convertView==null){ convertView=mInflater.inflate(R.layout.music_list,null); viewHolder=new ViewHolder(); viewHolder.music_name= (TextView) convertView.findViewById(R.id.textview_music); viewHolder.music_author= (TextView) convertView.findViewById(R.id.textview_artist); viewHolder.imageView_header= (ImageView) convertView.findViewById(R.id.image_header); convertView.setTag(viewHolder); }else { viewHolder= (ViewHolder) convertView.getTag(); } viewHolder.music_name.setText(musicFiles[position].getName()); MediaMetadataRetriever mmr=new MediaMetadataRetriever(); mmr.setDataSource(musicFiles[position].getAbsolutePath()); //显示歌曲图片 byte[] image=mmr.getEmbeddedPicture(); if(image!=null){ Bitmap bitmap= BitmapFactory.decodeByteArray(image,0,image.length); viewHolder.imageView_header.setImageBitmap(bitmap); }else { viewHolder.imageView_header.setImageResource(R.mipmap.ic_launcher); } //显示歌曲作者 String artist=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); if(artist!=null){ viewHolder.music_author.setText(artist); }else { viewHolder.music_author.setText("<未知>"); } return convertView; } class ViewHolder{ TextView music_name; TextView music_author; ImageView imageView_header; } } //**MusicService(歌曲播放、进度条设置)** public class MusicService extends Service { public static final int All_TIME=0; public static final int NOW_TIME=1; public static final String ADDPOSTION="addpostion"; private MediaPlayer player; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(final Intent intent, int flags, int startId) { int type=intent.getIntExtra("type",Config.MUSIC_START); switch (type){ case Config.MUSIC_START://播放歌曲 startMusic(intent); break; case Config.MUSIC_SEEKTO://进度条显示 if(player!=null){ int progress=intent.getIntExtra("progress",0); player.pause(); player.seekTo(progress); player.start(); } break; default: break; } return super.onStartCommand(intent, flags, startId); } /* 歌曲播放 */ private void startMusic(Intent intent) { String musicPath=intent.getStringExtra("musicName"); if(player==null){ player=new MediaPlayer(); } player.reset(); try { player.setDataSource(musicPath); player.prepare(); player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); int allTime=mp.getDuration(); Intent intent_all=new Intent(ADDPOSTION); intent_all.putExtra("type",All_TIME);//歌曲播放的总时间 intent_all.putExtra("allTime",allTime); sendBroadcast(intent_all); MusicPlayerThread thread=new MusicPlayerThread(); thread.start(); } }); } catch (IOException e) { e.printStackTrace(); } } class MusicPlayerThread extends Thread{ @Override public void run() { while (player.isPlaying()){ int nowTime=player.getCurrentPosition(); Intent intent_now=new Intent(ADDPOSTION); intent_now.putExtra("type",NOW_TIME);//歌曲播放的进度时间 intent_now.putExtra("nowTime",nowTime); sendBroadcast(intent_now); } super.run(); } } @Override public void onDestroy() { super.onDestroy(); } } //**MainActivity** public class MainActivity extends AppCompatActivity { private SeekBar mSeekBar; private MusicAdapter mAdapter; private LayoutInflater mInflater; private MediaPlayer player; private File[] musicFiles; private ListView musicListview; private MyMusicReceiver myMusicReceiver; public static final String ADDPOSTION="addpostion"; private TextView textViewAlltime; private TextView textViewNowtime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //进度条显示,播放时间显示 mSeekBar= (SeekBar) findViewById(R.id.seekbar); myMusicReceiver=new MyMusicReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction(ADDPOSTION); registerReceiver(myMusicReceiver,filter); textViewAlltime= (TextView) findViewById(R.id.textview_alltime); textViewNowtime= (TextView) findViewById(R.id.textview_nowtime); //显示歌曲列表 musicListview= (ListView) findViewById(R.id.listview); File musicDir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC); musicFiles=musicDir.listFiles(); mInflater=getLayoutInflater(); mAdapter=new MusicAdapter(mInflater,musicFiles); musicListview.setAdapter(mAdapter); musicListview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent=new Intent(getApplicationContext(),MusicService.class); intent.putExtra("type",Config.MUSIC_START); intent.putExtra("musicName",musicFiles[position].getAbsolutePath()); startService(intent); } }); //进度条的显示控制 mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { Intent intent=new Intent(getApplicationContext(),MusicService.class); intent.putExtra("type",Config.MUSIC_SEEKTO); intent.putExtra("progress",seekBar.getProgress()); startService(intent); } }); } //接收广播 class MyMusicReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { int type=intent.getIntExtra("type",1); switch (type){ case MusicService.All_TIME://歌曲播放的总时间 int allTime=intent.getIntExtra("allTime",1); textViewAlltime.setText(""+allTime); mSeekBar.setMax(allTime); break; case MusicService.NOW_TIME://歌曲播放的进度时间 int nowTime=intent.getIntExtra("nowTime",1); textViewNowtime.setText(""+nowTime); mSeekBar.setProgress(nowTime); break; default: break; } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myMusicReceiver); } }
相关文章推荐
- ffmpeg.exe移植到vs2010编译步奏
- [Mac OS]WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- java修改文件时间
- ogg常用配置文件
- bzoj 3156: 防御准备
- 第二篇:OC中类的继承
- FindBugs
- 速达软件各版本及产品ID
- 删除字符串开始及末尾的空格,并且把数组中间的多个空格转化为一个
- Rails进阶参考
- 历史上最简单Java环境变量配制方法
- async模块定义单个函数名
- UIday1202:单例
- 手势解锁步骤的基本思路
- 转载的vim配置文件
- java设计模式第5弹--责任链模式
- HTML Table 拼凑表格数据并支持滚动条
- Node.js 学习资源
- 音乐播放软件的发展史
- 计算机病毒软件的发展演变