現在大部份使用者所看見的執行畫面都是前端的程式(Activity),但是還有很多的服務需要在背景中執行,這個功能則需要使用到Service。
由於背景執行所以是要寫在Service而不是Activity,因此需要在權限頁面(AndroidManifest)中新增一個Service的服務。
二、方法
三、程式碼
(1) Service:這個服務本身是無介面,也並非一個獨立的Process,只是有需要長時間執行的獨立程序為了不影響主程式的運行,就會使用Service。
(2) MediaRecorder:這個類別主要是 Android錄音錄影所使用到的,詳細資料可以參詳官方網站。
Activity.java
package tw.Recording; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class RecordingActivity extends Activity { private Button start,stop; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start=(Button)findViewById(R.id.start); stop=(Button)findViewById(R.id.stop); start.setOnClickListener(new OnClickListener(){ //執行背景作業 @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(RecordingActivity.this, RecordingService.class); startService(intent); }}); stop.setOnClickListener(new OnClickListener(){ //停止背景作業 @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(RecordingActivity.this, RecordingService.class); stopService(intent); }}); } }Service.java
package tw.Recording; import java.io.File; import java.io.IOException; import android.app.Service; import android.content.Intent; import android.media.MediaRecorder; import android.os.Environment; import android.os.IBinder; public class RecordingService extends Service { private MediaRecorder mediaRecorder = null; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override //錄音 public void onStart(Intent intent,int startId) { //設定錄音檔名 String fileName = "test.amr"; try{ File SDCardpath=Environment.getExternalStorageDirectory(); File myDataPath=new File(SDCardpath.getAbsolutePath()+"/download"); if( !myDataPath.exists() ) myDataPath.mkdirs(); File recodeFile = new File(SDCardpath.getAbsolutePath() + "/download/"+fileName); mediaRecorder = new MediaRecorder(); //設定音源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //設定輸出檔案的格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); //設定編碼格式 mediaRecorder .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //設定錄音檔位置 mediaRecorder.setOutputFile(recodeFile.getAbsolutePath()); mediaRecorder.prepare(); //開始錄音 mediaRecorder.start(); } catch(IOException e){ e.printStackTrace(); } super.onStart(intent, startId); } @Override //停止背景時 public void onDestroy() { if(mediaRecorder != null) { mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; } super.onDestroy(); } }AndroidManifest.xml(記得加入)
沒有留言:
張貼留言