2013-04-23 1 views
0
mRecorder.prepare(); 
mRecorder.start(); 
Thread auto_stop=new Thread(new Runnable() 
{ 

@Override 
public void run() { 
    try { 
     Thread.sleep(30000); 
     if(WavAudioRecorder.flag) 
     { 
      mRecorder.stop(); 
      mRecorder.reset(); 
      btnControl.setText("Start"); 
      return ; 

     } 
    } catch (InterruptedException e) { 

      //e.printStackTrace(); 
    } 

} 

}); 
auto_stop.start(); 

Я пытаюсь сделать приложение рекордера, который записывает в течение 30 секунд и получает stopped.I я использует приведенный выше код для остановки аварии приложения recorder.The после записи на 30 seconds.How может разрешающая часть? Код, который я использую для запуска и остановки, находится в этом link. Есть ли другой способ остановить диктофон автоматически после 30 секундприложение падает после записи

04-23 09:53:34.955: E/AndroidRuntime(4278): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:823) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.view.View.requestLayout(View.java:15468) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.checkForRelayout(TextView.java:6313) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.setText(TextView.java:3567) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.setText(TextView.java:3425) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at android.widget.TextView.setText(TextView.java:3400) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at com.example.androidwaverecorder.MainActivity$1$1.run(MainActivity.java:53) 
04-23 09:53:34.955: E/AndroidRuntime(4278):  at java.lang.Thread.run(Thread.java:856) 
+0

Вы можете использовать обработчики ... – Triode

+0

Я как раз новичок, поэтому, пожалуйста, сообщите мне подробно –

+0

stacktrace from logcat, пожалуйста? –

ответ

1

Вы не можете использовать btnControl.setText("Start"); из другого потока. Я рекомендую использовать ASyncTask для асинхронной работы (например, вашей записи) и отображать данные в onPreExecute и onPostExecute методах.

+0

can u просто объясните, что такое preExecute и postExecute –

+0

будет ли он работать нормально, если я удалю этот оператор? –

+0

вы пробовали? – Axarydax