0

私はマイクから音を録音するAndroidアプリを開発しました.2つのアクティビティがあります.最初のアクティビティには写真があります.ユーザーが写真に触れるとアプリは2番目のアクティビティを実行して音を録音する必要があります.私の問題は写真に触れることです.レイアウトは記録が完了するまで表示されません。つまり、画像をクリックすると、終了時に記録が開始され、2 番目のレイアウトが表示されます。pic をクリックするとアプリが必要になり、次のレイアウトが表示され、記録機能が実行されます。これが私のコードです。asynctask は役に立ちますか?

主要:

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() {
    .
    . 
    .
  }
}
4

4 に答える 4

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.
                            }
                        });
                  }      
               }
        }
于 2013-10-08T09:27:04.647 に答える
0

の呼び出しrecord()onWindowFocusChanged()メソッドに移動するだけです

public void onWindowFocusChanged (boolean hasFocus)
{
    record(); 
}
于 2013-10-08T09:27:13.690 に答える
0

できれば AsyncTask を使用して、別の (非 UI) スレッドで record() を呼び出します。doInBackground にはレコード呼び出しが含まれます。

于 2013-10-08T11:21:03.963 に答える
0

私は言うだろう、に移動mp = new MediaPlayer();しますonCreate()

また、追加することを忘れないでください:

protected void onDestroy() {
  super.onDestroy();
  mediaPlayer.release();
}
于 2013-10-08T09:23:10.937 に答える