package com.joyplus.joylink; import java.io.File; import java.io.IOException; import java.util.ArrayList; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import com.androidquery.AQuery; import com.dlcs.dlna.Stack.MediaRenderer; import com.joyplus.joylink.Adapters.Tab1_Music_ListData; import com.joyplus.joylink.Dlna.DlnaMusicPlay; import com.joyplus.joylink.Dlna.DlnaSelectDevice; import com.joyplus.joylink.Utils.JoylinkUtils; import com.umeng.analytics.MobclickAgent; public class MusicPlay extends Activity implements OnClickListener { private String TAG = "Tab1_Photo"; private App app; private AQuery aq; private boolean isPlaying; private SeekBar sb; private int Duration; private Handler handler = null; private MediaPlayer mp = new MediaPlayer(); private ArrayList<Tab1_Music_ListData> musics_array = null; private int current_item = 0; // private ServiceToken mToken; private DlnaSelectDevice mMyService; private ImageButton mButtonDlna; private ImageButton mButtonBack; private ServiceConnection mServiceConnection = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub mMyService = ((DlnaSelectDevice.MyBinder) service).getService(); } public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.music_play); getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); getActionBar().setCustomView(R.layout.actionbar_layout_detail); app = (App) getApplication(); aq = new AQuery(this); Intent i = new Intent(); i.setClass(this, DlnaSelectDevice.class); bindService(i, mServiceConnection, BIND_AUTO_CREATE); isPlaying = false; handler = new Handler(); Intent intent = getIntent(); current_item = intent.getIntExtra("CURRENT", 0); musics_array = intent.getParcelableArrayListExtra("MUSICARRAY"); TextView mTextView = (TextView) getActionBar().getCustomView() .findViewById(R.id.actionBarTitle); mTextView.setText("正在播放"); // mTextView.setText(musics_array.get(current_item).title); mButtonBack = (ImageButton) getActionBar().getCustomView() .findViewById(R.id.slidingMenuButtonL); mButtonBack.setOnClickListener(this); mButtonDlna = (ImageButton) getActionBar().getCustomView() .findViewById(R.id.slidingMenuButton1); mButtonDlna.setOnClickListener(this); // aq.id(R.id.textView1).text(musics_array.get(current_item).title); // aq.id(R.id.textView2).text(musics_array.get(current_item).artist); // aq.id(R.id.textView3).text(musics_array.get(current_item).album); // aq.id(R.id.button2).background(R.drawable.music_play_pause); sb = (SeekBar) findViewById(R.id.seekBar1); sb.setOnSeekBarChangeListener(sbLis); playMusic(); } @Override public void onClick(View view) { if (view == mButtonDlna) { OnClickTopRight(); } else if (view == mButtonBack) finish(); } public void OnClickTopRight() { mp.pause(); isPlaying = false; handler.post(updatesb); aq.id(R.id.button2).background(R.drawable.music_play_play); ArrayList<MediaRenderer> mDmrCache = mMyService.getDmrCache(); if (mDmrCache.size() > 0) { CharSequence[] items = new String[mDmrCache.size()]; for (int i = 0; i < mDmrCache.size(); i++) items[i] = mDmrCache.get(i).friendlyName; if (mDmrCache.size() == 1) { MediaRenderer mMediaRenderer = mDmrCache.get(0); mMyService.SetCurrentDevice( 1); if (mMediaRenderer != null && mDmrCache != null) { gotoDlnaMusicPlay(); } } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("请选择你的设备:"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { // MediaRenderer mMediaRenderer = // mMyService.getMediaRenderer(); ArrayList<MediaRenderer> mDmrCache = mMyService .getDmrCache(); MediaRenderer mMediaRenderer = mDmrCache.get(item); mMyService.SetCurrentDevice(item + 1); if (mMediaRenderer != null && mDmrCache != null) { // app.setmMediaRenderer(mDmrCache.get(0)); gotoDlnaMusicPlay(); } // Do something with the selection } }); AlertDialog alert = builder.create(); alert.show(); } } else { app.MyToast(this, "正在搜索设备 ..."); } } private void gotoDlnaMusicPlay() { app.dataSaved.setCurrentPlayItem(current_item); Intent intent = new Intent(this, DlnaMusicPlay.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); intent.putExtra("CURRENT", current_item); intent.putParcelableArrayListExtra("MUSICARRAY", musics_array); try { startActivity(intent); finish(); } catch (ActivityNotFoundException ex) { Log.e(TAG, "Call DlnaPhotoSlideShow failed", ex); } } public void OnClickNext(View v) { nextMusic(); } public void OnClickResume(View v) { if (mp != null) { if (!isPlaying) { mp.start(); isPlaying = true; handler.post(updatesb); aq.id(R.id.button2).background(R.drawable.music_play_pause); } else { mp.pause(); isPlaying = false; handler.post(updatesb); aq.id(R.id.button2).background(R.drawable.music_play_play); } } } public void OnClickPre(View v) { preMusic(); } private void playMusic() { try { isPlaying = true; aq.id(R.id.textView1).text(musics_array.get(current_item).title); aq.id(R.id.textView2).text(musics_array.get(current_item).artist); aq.id(R.id.textView3).text(musics_array.get(current_item).album); if (musics_array.get(current_item).album_art != null) { File file = new File(musics_array.get(current_item).album_art); if (file.exists()) { aq.id(R.id.imageView1).image(file, 638); } } aq.id(R.id.button2).background(R.drawable.music_play_pause); mp.reset(); mp.setDataSource(musics_array.get(current_item)._data); mp.prepare(); mp.start(); Duration = mp.getDuration(); aq.id(R.id.textViewTime1).text("00:00"); aq.id(R.id.textViewTime2).text(JoylinkUtils.formatDuration(Duration)); sb.setMax(Duration); handler.post(updatesb); // Setup listener so next song starts automatically mp.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer arg0) { nextMusic(); } }); } catch (IOException e) { Log.v(getString(R.string.app_name), e.getMessage()); } } private void nextMusic() { if (mp != null && isPlaying) mp.stop(); if (++current_item >= musics_array.size()) { // Last song, just reset currentPosition current_item = 0; } app.dataSaved.setCurrentPlayItem(current_item); playMusic(); } private void preMusic() { if (mp != null && isPlaying) mp.stop(); if (--current_item <= 0) { // Last song, just reset currentPosition current_item = 0; } app.dataSaved.setCurrentPlayItem(current_item); playMusic(); // Play next song } @Override protected void onDestroy() { if (aq != null) aq.dismiss(); if (mp != null) { mp.stop(); mp.release(); } // if (mToken != null) { // MusicUtils.unbindFromService(mToken); // } handler.removeCallbacks(updatesb); unbindService(mServiceConnection); super.onDestroy(); } @Override public void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override public void onPause() { super.onPause(); MobclickAgent.onPause(this); } @Override protected void onStart() { super.onStart(); } Runnable updatesb = new Runnable() { @Override public void run() { // TODO Auto-generated method stub int m_p = mp.getCurrentPosition(); sb.setProgress(m_p); handler.postDelayed(updatesb, 1000); aq.id(R.id.textViewTime1).text(JoylinkUtils.formatDuration(m_p)); // 每秒钟更新一次 } }; private OnSeekBarChangeListener sbLis = new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub mp.seekTo(sb.getProgress()); // SeekBar确定位置后,跳到指定位置 } }; // private ServiceConnection autoshuffle = new ServiceConnection() { // public void onServiceConnected(ComponentName classname, IBinder obj) { // // we need to be able to bind again, so unbind // try { // unbindService(this); // } catch (IllegalArgumentException e) { // } // IMediaPlaybackService serv = IMediaPlaybackService.Stub.asInterface(obj); // if (serv != null) { // try { // serv.setShuffleMode(MediaPlaybackService.SHUFFLE_AUTO); // } catch (RemoteException ex) { // } // } // } // // public void onServiceDisconnected(ComponentName classname) { // } // }; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // add here. if (resultCode == 102) { gotoDlnaMusicPlay(); } super.onActivityResult(requestCode, resultCode, data); } }