獨立開發音樂播放器3

來源:互聯網
上載者:User
package codefans.app.activity;import codefans.app.util.Mp3Util;import codefans.mp3layer.R;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;public class Mp3PlayerActivity extends Activity{private boolean flag = false;  //播放  暫停 變數判斷private ImageButton playBt;private SeekBar seekBar;private Intent intent;   //播放資訊意圖private Bundle bundle;   //意圖傳遞的資訊private SeekBarReceiver receiver;private int position;   //播放進度條位置@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);this.playBt = (ImageButton) findViewById(R.id.play);this.seekBar = (SeekBar) findViewById(R.id.seekBar);//意圖   啟動service使用this.intent = new Intent("codefans.action.Mp3Player");bundle = new Bundle();//註冊廣播接受器receiver = new SeekBarReceiver();  IntentFilter filter = new IntentFilter();filter.addAction("codefans.intent.action.Mp3Player");this.registerReceiver(receiver, filter);}//播放按鈕點擊public void mediaPlay(View v){if(flag == false)  //改變播放按鈕表徵圖{   playBt.setImageResource(R.drawable.stop);   flag = true;   this.bundle.putString("filePath", "qq.mp3");   this.bundle.putInt("operate", Mp3Util.PLAY);   this.intent.putExtras(bundle);   startService(intent);      }else{ playBt.setImageResource(R.drawable.play); flag = false;  this.bundle.putInt("operate", Mp3Util.STOP); this.intent.putExtras(bundle); startService(intent); }}@Overrideprotected void onDestroy(){this.unregisterReceiver(receiver);  //解除接受廣播 super.onDestroy();}/** *   bindService 實現需要  這裡使用startservice  * @author Codefans *//啟動服務需要類private class MyServiceConnection implements ServiceConnection{public void onServiceConnected(ComponentName name, IBinder service){Mp3PlayerActivity.this.binder = (Player) service;}public void onServiceDisconnected(ComponentName name){Mp3PlayerActivity.this.binder = null;}} *//** * 播放進度條 位置廣播接受器 * @author Codefans * */private class SeekBarReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){    Mp3PlayerActivity.this.position = intent.getIntExtra("position", 0);      //  Message msg = new Message();    Mp3PlayerActivity.this.seekBar.setProgress(position);    //    Log.i("result", String.valueOf(position));   }}}

package codefans.app.service;import java.io.File;import java.io.IOException;import codefans.app.util.Mp3Util;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Bundle;import android.os.Environment;import android.os.IBinder;public class Mp3Service extends Service{private MediaPlayer mediaPlayer;private File musicFile;private String name;@Overridepublic void onCreate(){if (this.mediaPlayer == null){this.mediaPlayer = new MediaPlayer();}}@Overridepublic void onDestroy(){if (this.mediaPlayer != null){this.mediaPlayer.stop();this.mediaPlayer.release();this.mediaPlayer = null;}super.onDestroy();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId){Bundle bundle = intent.getExtras();switch (bundle.getInt("operate")){case Mp3Util.PLAY:this.playMusci(bundle.getString("filePath"));break;case Mp3Util.STOP:this.stop();break;}return START_STICKY;}@Overridepublic IBinder onBind(Intent intent){return null;}// 開始播放private void playMusci(String fileName){try{if (fileName.equals(name))  //播放同檔案  {this.mediaPlayer.start();}else   //播放不同檔案{this.name = fileName;this.musicFile = new File(Environment.getExternalStorageDirectory(), fileName);this.mediaPlayer.reset();this.mediaPlayer.setDataSource(musicFile.getAbsolutePath());this.mediaPlayer.prepare();this.mediaPlayer.setOnPreparedListener(new MyPreParedListenner());Thread t = new SendBroadCastThread();t.start();}}catch (IllegalArgumentException e){e.printStackTrace();}catch (IllegalStateException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}}private void stop() //暫停{this.mediaPlayer.pause();}// mediaPlayer緩衝完執行事件private class MyPreParedListenner implements OnPreparedListener{public void onPrepared(MediaPlayer mp){mp.start();}}/** * 發送播放位置線程, 每隔一秒發送一次廣播 改變播放器進度條 * @author Codefans * */private class SendBroadCastThread extends Thread{@Overridepublic void run(){while(true){Intent intent = new Intent();intent.putExtra("position", Mp3Service.this.mediaPlayer.getCurrentPosition());intent.setAction("codefans.intent.action.Mp3Player");// action與接收器相同sendBroadcast(intent);  //發送廣播try{Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}}}}/** * 建立一個內部類 Activity調用service時返回此binder *  * @author Codefans *  *         private class Mp3IBinder extends Binder implements Player { *  *         public void playMusic(String filePath) { *         Mp3Service.this.playMusci(filePath); } *  *         } */}

代碼也不知道怎麼發  都發上來了 

   今天主要寫了關閉Activity後台依然在唱歌   還有一個就是進度條跟隨播放 前進

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.