Почему анимация не отображает фронт во время потоковой передачи в Android - PullRequest
0 голосов
/ 09 декабря 2011

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

      bhajan_play.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            ConnectivityManager conMan = (ConnectivityManager)         getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo Info = conMan.getActiveNetworkInfo();
            if (Info == null) {
                Toast.makeText(BhajanStream.this, "POOR SIGNALS ",
                        Toast.LENGTH_LONG).show();
                // startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
            }

            else {

                loadanim.setBackgroundResource(R.drawable.loader_1);
                loadanim.setBackgroundResource(R.anim.loadanim);
                loadanimation = (AnimationDrawable) loadanim
                        .getBackground();
                loadanimation.isVisible();
                effectanim.setBackgroundResource(R.drawable.effect_1);
                effectanim.setBackgroundResource(R.anim.musiceffect);
                effectanimation = (AnimationDrawable) effectanim
                        .getBackground();
                bhajan_play.setBackgroundResource(R.drawable.bhajan_start);
                bhajan_play.setVisibility(View.GONE);
                bhajan_stop.setVisibility(View.VISIBLE);
                loadanim.setVisibility(View.VISIBLE);
                effectanim.setVisibility(View.VISIBLE);
            }

            try {
                mediaPlayer.reset();
                mediaPlayer.setDataSource(rs_bhajan_uri);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            try {
                mediaPlayer.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mediaPlayer.start();

        }

    });

      }

protected void onPreExecute() {
    // UI work allowed here

    loadanimation.start();
      }

1 Ответ

1 голос
/ 09 декабря 2011

Вы должны позвонить prepareAsync(), а не просто prepare().
Из документации MediaPlayer :

Для потоков вы должны вызвать prepareAsync (), который возвращает немедленно, а не блокировать до тех пор, пока в буфере не будет достаточно данных.

(вызов метода prepare блокирует вашу ветку пользовательского интерфейса до тех пор, пока данные не будут подготовлены, а это означает, что обновление ваших представлений должно ждать до завершения подготовки)

Пример реализации:

    mediaPlayer.prepareAsync();
    mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
...