Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用AsyncTask播放PCM音轨而不冻结活动_Android_Android Asynctask - Fatal编程技术网

Android 使用AsyncTask播放PCM音轨而不冻结活动

Android 使用AsyncTask播放PCM音轨而不冻结活动,android,android-asynctask,Android,Android Asynctask,我需要一些帮助。这就是问题所在,也是我到目前为止所做的事情 问题: 我想播放我以前录制的pcm文件。由于这个文件可能更大,我使用audiotrack播放它。这个很好用。但我不希望活动冻结。我已经试过线程等等,现在我正在处理异步任务,但是活动仍然没有响应 这就是我得到的: 在ui活动中,我创建了一个新的waveplayer对象并尝试运行它 /** Called when the activity is first created. */ @Override public void onCreate

我需要一些帮助。这就是问题所在,也是我到目前为止所做的事情

问题:

我想播放我以前录制的pcm文件。由于这个文件可能更大,我使用audiotrack播放它。这个很好用。但我不希望活动冻结。我已经试过线程等等,现在我正在处理异步任务,但是活动仍然没有响应

这就是我得到的:

在ui活动中,我创建了一个新的waveplayer对象并尝试运行它

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    /**
     * Handles ShortClicks for ListView
     */
    OnItemClickListener itemlistener = new OnItemClickListener(){

        MediaPlayer mp=null;
        String currentlyplaying = null;

        @Override
        public void onItemClick(AdapterView<?> adaptview, View clickedview, int position,
                long id) {

            String pathtofile = (String) adaptview.getItemAtPosition(position);
            if(pathtofile.contains(".wav"))
            {
                //HQ!
                if(mp==null)
                {
                    clickedview.setSelected(true);
                    try
                    {

                        WavePlayer t = null;
                        //TODO: //add thread waveplayer to play file!
                        try {
                            t = new WavePlayer(pathtofile);
                            t.execute((Void)null);
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        clickedview.postDelayed(new Deselector(clickedview, t), 1000);

                        currentlyplaying = pathtofile;


                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } 
                }
                else
                {

                }

            }
            else{
                //NO HQ
                //you dont need to know that :)


            }


        }
    };
关于播放的一切都很好,我能听到我的声音,播放本身也很好。。。但是主活动中的gui仍然没有响应

希望有人能帮忙

提前谢谢


马库斯

我通过使用远程服务解决了这个问题。我对这个解决方案很满意,因为我已经有了一个用于其他目的的解决方案。现在界面再次响应。

非常感谢您的编辑,代码标记对我来说根本不太好:(复制到eclipse、ctrl+i和back:')最初它来自我的eclipse..:D
/**
 * This Runnable tries to deselect the view after playing the audio file.
 * @author quant
 *
 */
class Deselector implements Runnable
{
    View view = null;
    AsyncTask thread;

    Deselector(View view, AsyncTask t)
    {
        this.view = view ; 
        this.thread = t;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            view.setSelected(false);
            thread.cancel(true);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}