1

私は音声録音用のアプリケーションを開発しています...問題は、それをバックグラウンドで動作させる方法がわからないことです。つまり、ユーザーがアプリケーションを閉じても、レコーダーは動作し続けます。最大に達した場合は、ファイルを削除して再度記録します。

ユーザーはボタンを1回押すだけで、ユーザーがプログラムをアンインストールするまでアプリケーションは永久に機能します。

私のコードは次のとおりです。

public class MainActivity extends Activity {
private MediaRecorder recorder ;

Button B ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recorder = new MediaRecorder();

    B = (Button)findViewById(R.id.button1) ;

      B.setOnClickListener(new View.OnClickListener() {

           public void onClick(View v) {

               Thread startThread = new Thread ( new startRe (recorder));
               startThread.start() ; 
               B.setEnabled(false); 

           }
      }
      );


}
}

レコーディングクラス:

public class startRe implements Runnable {
private MediaRecorder recorder;


startRe( MediaRecorder r ) {

    this.recorder = r ; 
}
public void run() {
    // TODO Auto-generated method stub
    startRecording();
}


public void startRecording() {
    //recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(getFilePath());
    try{
        recorder.prepare();
        recorder.start();
    }catch (Exception e){
        e.printStackTrace();
    }

}


private String getFilePath() {
    String filePath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(filePath, "MediaRecorderSample");

    if(!file.exists())
        file.mkdirs();

    return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".mp4");
}

}

ここでの問題は、永久に作成する方法と、最大サイズに達したときに削除する方法です。また、このコードを使用すると、出力ファイルが見つからなかったため、実際に記録されているかどうかわかりません。

4

1 に答える 1

0

これを行うには、サービスで記録を開始し、startService()を呼び出します。このようにして、startService()と呼ばれる開始されたアクティビティが閉じられている場合でも、記録は続行されます。

于 2013-02-27T18:37:37.853 に答える