<LinearLayout xmlns:android=""
xmlns: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>
<LinearLayout xmlns: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>
publicclassConfig {publicstaticfinalint MUSIC_START=0;
publicstaticfinalint MUSIC_SEEKTO=1;
}
publicclassMusicAdapterextendsBaseAdapter{private LayoutInflater mInflater;
publicMusicAdapter(LayoutInflater mInflater, File[] musicFiles) {
this.mInflater = mInflater;
this.musicFiles = musicFiles;
}
private File[] musicFiles;
@OverridepublicintgetCount() {
return musicFiles.length;
}
@Overridepublic Object getItem(int position) {
return position;
}
@OverridepubliclonggetItemId(int position) {
return position;
}
@Overridepublic 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;
}
}
publicclassMusicServiceextendsService {publicstaticfinalint All_TIME=0;
publicstaticfinalint NOW_TIME=1;
publicstaticfinal String ADDPOSTION="addpostion";
private MediaPlayer player;
@Nullable@Overridepublic IBinder onBind(Intent intent) {
returnnull;
}
@OverridepublicvoidonCreate() {
super.onCreate();
}
@OverridepublicintonStartCommand(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;
}
returnsuper.onStartCommand(intent, flags, startId);
}
privatevoidstartMusic(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() {
@OverridepublicvoidonPrepared(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{
@Overridepublicvoidrun() {
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();
}
}
@OverridepublicvoidonDestroy() {
super.onDestroy();
}
}
publicclassMainActivityextendsAppCompatActivity {private SeekBar mSeekBar;
private MusicAdapter mAdapter;
private LayoutInflater mInflater;
private MediaPlayer player;
private File[] musicFiles;
private ListView musicListview;
private MyMusicReceiver myMusicReceiver;
publicstaticfinal String ADDPOSTION="addpostion";
private TextView textViewAlltime;
private TextView textViewNowtime;
@OverrideprotectedvoidonCreate(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() {
@OverridepublicvoidonItemClick(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() {
@OverridepublicvoidonProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@OverridepublicvoidonStartTrackingTouch(SeekBar seekBar) {
}
@OverridepublicvoidonStopTrackingTouch(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{
@OverridepublicvoidonReceive(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;
}
}
}
@OverrideprotectedvoidonDestroy() {
super.onDestroy();
unregisterReceiver(myMusicReceiver);
}
}
发布评论