Android - wie im hintergrund threading richtig?

Frage mich, wenn jemand mir helfen könnte hintergrund threading auf Android.

Ich habe ein Stück code, das Datensätze aus der mic des Geräts an, und spielt dann zurück, was es Datensätze über das Ohr-Stück(am 1,5).

Ich versuche, führen Sie es in ein thread, aber waren erfolglos bei der es zu laufen als hintergrund-thread.

Derzeit läuft es und sperrt die Aktivität so, dass all dies geschieht, ist der thread aktiv ist und die Benutzeroberfläche gesperrt ist oder zu sein scheint, hängen.

Hier ist die neueste Art und Weise habe ich versucht, es zu tun:

public class LoopProg extends Activity {


boolean isRecording; //currently not used

  public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   AudioManager audio_service = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

   audio_service.setSpeakerphoneOn(false);
   audio_service.setMode(AudioManager.MODE_IN_CALL);
   audio_service.setRouting(AudioManager.MODE_NORMAL,
   AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);

   Record record = new Record();  
   record.run();

 }

  public class Record extends Thread
  {


          static final int bufferSize = 200000;
          final short[] buffer = new short[bufferSize];
          short[] readBuffer = new short[bufferSize];

          public void run() {  
            isRecording = true;
            android.os.Process.setThreadPriority
            (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

            int buffersize = AudioRecord.getMinBufferSize(11025,
            AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT);

                           AudioRecord arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
                                           11025,
                                           AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                           AudioFormat.ENCODING_PCM_16BIT,
                                           buffersize);

                           AudioTrack atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
                                           11025,
                                           AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                           AudioFormat.ENCODING_PCM_16BIT,
                                           buffersize,
                                           AudioTrack.MODE_STREAM);

                           setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);


                           atrack.setPlaybackRate(11025);

                           byte[] buffer = new byte[buffersize];
                           arec.startRecording();
                           atrack.play();

                           while(isRecording) {
                                   arec.read(buffer, 0, buffersize);
                                   atrack.write(buffer, 0, buffer.length);
                           }

                           arec.stop();
                           atrack.stop();
                           isRecording = false;
              }
      }
}

Ich Frage mich, wenn jemand könnte mich auf wie Sie verwandeln diese in einen hintergrund-thread? Oder prehaps zeigen Sie mir einige Tutorials, die relevant sein können, die ich vielleicht vergessen habe?

Vielen Dank im Voraus

Schreibe einen Kommentar