2013-10-08 38 views
0

我開發了一個android應用程序來記錄來自麥克風的聲音,它有2個活動,第一個活動中有一個圖片,當用戶觸摸圖片時,應用程序應該運行secound activty來錄製聲音,我的問題是通過觸摸圖片,第二個XML佈局劑量不apeare直到記錄完成,我的意思是通過點擊圖片開始記錄時,它完成了第二個佈局出現。我想通過點擊圖片來顯示應用程序,然後顯示下一個佈局,然後運行記錄功能。這裏是我的代碼,是asynctask有幫助嗎?功能加載比Android中的佈局更快

主營:

public class Main extends Activity { 

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

    ImageView micro = (ImageView) findViewById(R.id.imageView1); 
    micro.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(Main.this, Record.class)); 
     } 
    }); 
} 
} 

實錄:

public class Record extends Activity { 

MediaPlayer mp = new MediaPlayer(); 
String name; 

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

    record(); 

} 

public void record() { 
    . 
    . 
    . 
    } 
} 
+0

你可以在'onResume'方法中添加'record();'語句。但是最聰明的一個會使用一個新線程(AsyncTask,Handler等) –

+0

我認爲asynctask很有幫助,但我不知道如何使用它 –

+0

然後搜索它,大量的外殼:) –

回答

0

我會說,移動mp = new MediaPlayer();onCreate()

也不要忘了補充:

protected void onDestroy() { 
    super.onDestroy(); 
    mediaPlayer.release(); 
} 
+0

仍然有相同的問題 –

+0

嘗試添加此: '@Override public void onResume(){record(); }' 到您的記錄活動 – injecteer

0

試試這個辦法

 public class Record extends Activity { 

      MediaPlayer mp; 
      String name; 

      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.record); 
       mp = new MediaPlayer(); 
       new LongOperation().execute(); 

      } 
      private class LongOperation extends AsyncTask<Void, Void, Void> 
       { 
        @Override 
        protected void doInBackground(String... params) { 

          runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
          // add code for record here. 
          } 
         }); 
        }  
       } 
     } 
+0

嗨,埃米爾,你有沒有試試這個。如果不工作,那麼也請回復我們可以使用線程來解決這個問題。 –

+0

仍然有同樣的問題 –

+0

使用線程來調用記錄函數。請參閱我更新的答案。 –

0

只要您的通話record()進入onWindowFocusChanged()方法

public void onWindowFocusChanged (boolean hasFocus) 
{ 
    record(); 
} 
0

通話記錄()在一個單獨的(非UI)線程,最好使用的AsyncTask。 doInBackground將包含記錄調用。

+0

我不知道如何使用asynctask –