тост никогда не называется - PullRequest
0 голосов
/ 03 декабря 2011

Когда я нажимаю изображение на экране, оно вызывает powerButton.OnClickListener (), как и положено, и после нескольких секунд буферизации поток воспроизводится просто отлично.Тем не менее, люди хотели бы, чтобы на экране появилось краткое всплывающее окно, чтобы уведомить пользователя «Соединение с радиопотоком, пожалуйста, подождите ...»

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

Любая помощь будет принята с благодарностью, и я добавил большую часть кода и предоставлю больше при необходимости.

        // run on powerButton click
    powerButton.setOnClickListener(new OnClickListener()
        {
        public void onClick(View view)
        {
            // check if the player is started or stopped
            if (isPlaying) // player is streaming
            {
                // stop the stream and set isPlaying to false
                mediaPlayer.stop();

                // release the media player
                releaseMediaPlayer();

                // update notification
                mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);

                // set power button to "powered off" image
                powerButton.setImageResource(R.drawable.power_off);
            }
            else // player not streaming
            {
                // notify the user that the stream is loading
                final Toast streamLoading = toast.makeText(getBaseContext(), "Radio Stream Connecting, Please Wait...", Toast.LENGTH_SHORT);
                streamLoading.show();

                // try catch block to attempt connecting to radioUrl
                try
                {                       
                    // create new instance of media player
                    mediaPlayer = new MediaPlayer();

                    // set media player to handle audio streams                    
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

                    // connect to radio stream and fill buffer
                    mediaPlayer.setDataSource(radioUrl);
                    mediaPlayer.prepare(); // might take long depending on buffering speed

                    // start the media player and set isPlaying to true
                    mediaPlayer.start();
                    isPlaying = true;

                    // update notification, clear stream message
                    createNotification();

                    // set power button to "powered on" image
                    powerButton.setImageResource(R.drawable.power_on);
                }
                catch (IllegalArgumentException e) // cannot connect to stream
                {
                    // clear streaming text and notify user of failure
                    final Toast streamError1 = Toast.makeText(MainMenu.this, "Failed to load: Unable to connect to stream!", Toast.LENGTH_SHORT);
                    streamError1.show();

                    // release the media player and display error
                    releaseMediaPlayer();
                    mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
                    e.printStackTrace();
                }
                catch (IllegalStateException e) // stream cannot play audio
                {
                    // clear streaming text and notify user of failure
                    final Toast streamError2 = Toast.makeText(getBaseContext(), "Failed to load: cannot play stream!", Toast.LENGTH_SHORT);
                    streamError2.show();

                    // release the media player and display error
                    releaseMediaPlayer();
                    mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
                    e.printStackTrace();
                }
                catch (IOException e) // general connection issue
                {
                    // clear streaming text and notify user of failure
                    final Toast streamError3 = Toast.makeText(getBaseContext(), "Failed to Load: Connection issue!", Toast.LENGTH_SHORT);
                    streamError3.show();

                    // release the media player and display error
                    releaseMediaPlayer();
                    mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
                    e.printStackTrace();
                }
            }

        }
    });

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Это потому, что тост не будет отображаться, пока вы не вернетесь из onClick, потому что это поток пользовательского интерфейса.Я не сделаю этого, пока не начнется буферизация.Я думаю, чтобы получить желаемый эффект, вы проверяете AsynchTask, чтобы выполнить буферизацию в фоновом потоке и сразу же возвращаетесь из onClick.

На самом деле, как вы это делаете, если буферизация занимает слишком много времени, ваше приложение будет помечено как не отвечающее Android.

0 голосов
/ 03 декабря 2011

Попробуйте использовать AsyncTask , где первое, что делает AsyncTask, это отображает тост перед тем, как попасть в процедуру буферизации.

...