0

我开发了一个 android 应用程序来记录麦克风的声音,它有 2 个活动,在第一个活动中有一个图片,当用户触摸图片时,应用程序应该运行第二个活动来录制声音,我的问题是通过触摸图片,第二个 xml在记录完成之前布局不会出现,我的意思是通过单击图片它在完成时开始记录然后出现第二个布局。我想要应用程序通过单击图片它向我显示下一个布局,然后运行记录功能。这是我的代码,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

我会说,移动mp = new MediaPlayer();onCreate()

也不要忘记添加:

protected void onDestroy() {
  super.onDestroy();
  mediaPlayer.release();
}
于 2013-10-08T09:23:10.937 回答
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

在单独的(非 UI)线程上调用 record(),最好使用 AsyncTask。doInBackground 将包含记录调用。

于 2013-10-08T11:21:03.963 回答