您的位置:首页 > 其它

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: