повторять звук через каждые 5 секунд - PullRequest
1 голос
/ 11 августа 2011

Я отредактировал и перепробовал много методов.В основном есть кнопка.Что я хочу, чтобы, если я щелкну по нему, он начнет воспроизводить звук «норвежский» через каждые 5 секунд, пока я снова не нажму эту кнопку.Я написал скрипт, который мне подходит, но он каждый раз вылетает :(. Вот код и ошибки, вы можете помочь?

    //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();
            }
            }
        };

И ошибка, когда я нажимаю на кнопку:

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 ]

1 голос
/ 11 августа 2011

Вы не установили имя для PreferenceManager.getDefaultSharedPreferencesName.

(с макушки головы, но попробуйте что-то вроде следующего):

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

Сделайте это, прежде чем пытаться получить общие настройки.

Поместите в значения все, что вам нравится, проверьте документацию, если имена переменных не понятны:)

Надеюсь, это поможет!

EDIT:

Теперь вы пытаетесь получить доступ к MediaPlayer, созданному в другом потоке. Вы не можете сделать это. Вам необходимо MediaPlayer.create () и MediaPlayer.start () в одном потоке.

0 голосов
/ 12 августа 2011

Вместо этого вы можете попробовать использовать android.os.CountDownTimer и использовать длинный обратный отсчет.Существует метод onTick (), который вы можете использовать для воспроизведения звука (установив значение 5 секунд для countDownInterval в конструкторе).Вы можете остановить его, вызвав метод cancel () при следующем нажатии кнопки.

0 голосов
/ 11 августа 2011

В вашей ветке много piiksumine, что бы это ни значило, я бы лучше назвал Thread и int разными именами.

Также я не уверен, что хорошо понимаю, что здесь задумано,но я не думаю, что вы должны запускать поток в его собственном методе run () с помощью piiksumine.start ();

0 голосов
/ 11 августа 2011

Хорошо, одна реализация состояла бы в том, чтобы просто запустить асинхронную задачу и запустить бесконечный цикл, в цикле продолжайте запрашивать системное время, сравнить время с начальным временем, если прошедшее время равно пяти секундам, просто запустите звуковой сигнал.

...