MediaPlay的简单音频播放

来源:互联网 发布:c语言九九乘法表倒三角 编辑:程序博客网 时间:2024/06/08 11:41

MediaPlayer.java

//1.采用bindService是因为保证每次进来后可以重新绑定click事件,当然如果已经startService,那么unbindservice,只会unbind,不会onDestroy掉,在进来后虽然不会bind了,但是其实还是绑定成功的,因为调用了onServiceConnected//2.采用startService是因为保证应用退出后,再进来还是同一个service实例,有着自己生命周期public class Mediaplayer extends Activity {private boolean isbinded = false;private ServiceConnection conn = new ServiceConnection(){@Overridepublic void onServiceConnected(ComponentName arg0, IBinder arg1) {System.out.println("onServiceConnected");isbinded=true;final MyBiner bind=(MyBiner)arg1;findViewById(R.id.stop).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubbind.stopmusic();}});findViewById(R.id.start).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubbind.playmusic();}});}//是在服务崩溃或被杀死导致的连接中断时被调用,而如果我们自己解除绑定时则不会被调用@Overridepublic void onServiceDisconnected(ComponentName arg0) {System.out.println("onServiceDisconnected");}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Intent intent = new Intent(this, PlayService.class);startService(intent);  bindService(intent, conn, BIND_AUTO_CREATE);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubif(isbinded==true){unbindService(conn);isbinded=false;}super.onDestroy();}}


PlayService.java

public class PlayService extends Service{private Uri resource=Uri.parse("http://qzone.haoduoge.com/music/C0BEDKZT7D75B00FE55A8D0312EB01F203BDA.mp3");   //from networkprivate MediaPlayer mediaplayer=null;/** * 停止 */void stopmusic1(){if(mediaplayer!=null){mediaplayer.stop();mediaplayer.release();mediaplayer=null;}}/** * 方式1 */private void playmusic1(){stopmusic1();mediaplayer=MediaPlayer.create(this,R.raw.yuanwang);  //这里其实是会阻塞主线程的 ,所以要放到其他线程mediaplayer.start();         //no need to call prepare because create does for you}/** * 方式2 */private void playmusic2(){stopmusic1();mediaplayer=new MediaPlayer();mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);try{mediaplayer.setDataSource(this,resource);   //这里其实是会阻塞主线程的 ,所以要放到其他线程mediaplayer.prepare();   }catch(IOException e){e.printStackTrace();}mediaplayer.start();}public  class MyBiner extends Binder{public  void playmusic(){playmusic1();}public  void stopmusic(){stopmusic1();}}@Overridepublic IBinder onBind(Intent arg0) {System.out.println("onBind");return new MyBiner();}@Overridepublic void onCreate() {System.out.println("onCreate");super.onCreate();}@Overridepublic void onDestroy() {System.out.println("onDestroy");super.onDestroy();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onStart(Intent intent, int startId) {System.out.println("onStart");super.onStart(intent, startId);}@Overridepublic boolean onUnbind(Intent intent) {System.out.println("onUnbind");return super.onUnbind(intent);}}



0 0