每5秒钟后重复一次声音

时间:2011-08-11 17:50:07

标签: java android audio logcat

我编辑并尝试过很多方法。基本上有按钮。我想要的是,如果我点击它,它将在每5秒钟后再次开始播放声音'norse',直到我再次点击该按钮。我写的脚本对我来说似乎很好,但每次都崩溃:(。这是代码和错误,你能帮忙吗?

    //BUTTON SHIT\\

    teebheli = false;
    magamine = MediaPlayer.create(this, R.raw.norse);
    bhelitegija = (Button) findViewById(R.id.bTeeHeli);
    bhelitegija.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (teebheli == false ){
                bhelitegija.setText("Lõpeta heli!");
                magamine.start();
                teebheli = true;
                }
            if (teebheli == true) {
                bhelitegija.setText("Tee heli!");
                magamine.stop();
                teebheli = false;
            }

            }

    });
    piiksumine = new Thread(){
        public void run(){
            try {
                int piiksumine = 0;
                while (piiksumine < 5000) {
                    sleep(100);
                    piiksumine = piiksumine + 100;
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally {
                piiksumine.start();
            }
            }
        };
单击按钮时

AND错误:

08-11 18:09:36.738: ERROR/MediaPlayer(1224): start called in state 0
08-11 18:09:36.738: ERROR/MediaPlayer(1224): error (-38, 0)
08-11 18:09:36.746: ERROR/MediaPlayer(1224): stop called in state 0
08-11 18:09:36.746: ERROR/MediaPlayer(1224): error (-38, 0)
08-11 18:09:36.777: ERROR/MediaPlayer(1224): Error (-38,0)
08-11 18:09:36.786: ERROR/MediaPlayer(1224): Error (-38,0)

4 个答案:

答案 0 :(得分:1)

您尚未为PreferenceManager.getDefaultSharedPreferencesName设置名称。

(在我的头顶,但尝试类似下面的事情):

PreferenceManager.setDefaultValues(context, sharedPreferencesName, 
    sharedPreferencesMode, resId, readAgain);

在尝试获取共享偏好设置之前执行此操作。

将您喜欢的任何内容放入值中,如果变量名称不清楚,请查看文档:)

希望这有帮助!

编辑:

现在您正尝试访问在另一个线程中实例化的MediaPlayer。你不能这样做。您需要在同一个线程中使用MediaPlayer.create()和MediaPlayer.start()。

答案 1 :(得分:0)

一个实现就是只启动一个异步任务,然后启动一个无限循环,在循环中继续询问系统时间,将时间与初始时间进行比较,如果时间过去等于五秒钟就开火了嘟。

答案 2 :(得分:0)

你的Thread中有很多piiksumine,无论这意味着什么,我宁愿给Thread和int赋予不同的名字。

此外,我不确定我是否理解这里的目的,但我认为你不应该使用piiksumine.start()在自己的run()方法中启动线程;

答案 3 :(得分:0)

您可以尝试使用android.os.CountDownTimer,并使用长倒计时。你可以使用onTick()方法来播放声音(通过在构造函数中将countDownInterval设置为5秒)。您可以在下次按下按钮时通过调用cancel()来停止它。