Метод внутри темы выходит из фокуса - PullRequest
1 голос
/ 22 ноября 2011

У меня есть метод, который я вызываю из onCreate (основной поток).Внутри метода я вызываю еще один метод и Runnable, который вызывает один и тот же метод несколько раз.Вот как это выглядит,

 public void start() {
    try {
        if (start == 0) {
            playpause.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.play));
            initialPoiPlayStatus = true;
            playAudio();
        }
        if (play) {
            if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
                // for displaying view stub
                poi = listOfPOI.get(j);
                int pos = mMediaPlayer.getCurrentPosition();
                int convSeconds = -1;
                convSeconds = ((int) (pos) / 1000);
                // displaying the you tube pop up based on the parsed value
                // from the plist
                youTube(convSeconds);
                // call the method to change the image while the audio is
                // playing
                changeImage();
                seek_bar.setProgress(current_position);
                notification = new Runnable() {
                    public void run() {
                        start();
                    }
                };
                handler.postDelayed(notification, 1000);
            } else {
                if (j != (listOfPOI.size() - 1)) {
                    firstPlay = true;
                    initialPoiPlayStatus = true;
                    j++;
                    playAudio();
                    start();
                    // retrieve mascot info
                    if (isNetworkAvailable() == true) {
                        receiveResponse();
                    } else {

                    }
                } else {
                    threadHandler.sendEmptyMessage(0);
                }
            }
        }
    } catch (Exception e) {
        System.out.println(poi.getPlistPath());
        e.printStackTrace();
    }
}

Теперь внутри youtube,

 private void youTube(int convSeconds) {
    frameLayout = (FrameLayout) findViewById(R.id.frameLayout);
    youtubeWebView = (WebView) findViewById(R.id.youtubewebView);
    try {
        if (poi.getIsYoutubePresent().equals("true")) {

            //mMediaPlayer.pause();
            isNetworkAvailable();
            if (isNetworkAvailable() == true) {

                String startTimeyoutube = poi.getYoutubestartTime();
                Integer youTubeStartTime = Integer
                        .parseInt(startTimeyoutube);
                if (convSeconds == youTubeStartTime) {

                    if (frameLayout.getVisibility() == View.GONE) {
                        frameLayout.setVisibility(View.VISIBLE);
                        slideUp = AnimationUtils.loadAnimation(this,
                                R.anim.slide_up);
                        frameLayout.startAnimation(slideUp);
                    }

                    final String youTubeurl = poi.getLink();
                    WebSettings websets = youtubeWebView.getSettings();
                    websets.setJavaScriptEnabled(true);
                    registerForContextMenu(youtubeWebView);
                    youtubeWebView
                            .setWebViewClient(new ItemsWebViewClient());
                    youtubeWebView.loadUrl(youTubeurl);
                    youtubeWebView.getSettings().setLayoutAlgorithm(
                            LayoutAlgorithm.SINGLE_COLUMN);
                    firstPlay = false;
                    initialPoiPlayStatus = false;
                    paused = true;
                    play = false;
                    playpause.setBackgroundDrawable(getResources().getDrawable(
                            R.drawable.play));
                    if (mMediaPlayer.isPlaying()) {
                        mMediaPlayer.pause(); 
                    }

                    Button goBtn = (Button) findViewById(R.id.youtubeButton);
                    goBtn.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View V) {
                            startActivity(new Intent(Intent.ACTION_VIEW,
                                    Uri.parse(youTubeurl)));
                        }
                    });

                    ImageButton close = (ImageButton) findViewById(R.id.youtubecloseButton);
                    close.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                            frameLayout.setVisibility(View.GONE);
                            if (!mMediaPlayer.isPlaying()) {
                                mMediaPlayer.start();
                            }
                                    playpause.setBackgroundDrawable(getResources().getDrawable(
                                    R.drawable.pause));
                        }
                    });
                } 
            } else {
                Toast.makeText(getApplicationContext(), "No network available", Toast.LENGTH_SHORT).show();
            }
        } else {
            frameLayout.setVisibility(View.INVISIBLE);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return;
}

Здесь всякий раз, когда (convSeconds == youTubeStartTime) {} становится истинным, я делаю свою паузу аудио, т.е.,

 if (mMediaPlayer.isPlaying()) {
    mMediaPlayer.pause(); 
}

И в течение этого времени я также хочу, чтобы start () внутри уведомления Runnable продолжал вызывать.Но если я сделаю звуковую паузу, это произойдет не только.Контроль полностью теряется в этом случае.И после нажатия кнопки Image закрыть, я пытаюсь снова заставить звук воспроизводиться следующим образом

if (!mMediaPlayer.isPlaying()) {
    mMediaPlayer.start();
}

Звук продолжает воспроизводиться, но ползунок / панель поиска не двигается, потому что start () внутри уведомления незвонить

Кто-нибудь знает, почему так происходит?

Примечание : Как бы то ни было, если я не заставлю свой медиаплеер не останавливаться, он работает нормально.У меня проблема возникает, когда я заставляю звук останавливаться

1 Ответ

0 голосов
/ 30 ноября 2011

Я наконец решил проблему, возможно, это не стандартный способ.Но это работает для меня.

Я только что повторил

           notification = new Runnable() {

                public void run() {
                    start();
                }
            };
            handler.postDelayed(notification, 1000); 

, где я пытаюсь закрыть кнопку изображения, то есть,

  ImageButton close = (ImageButton) findViewById(R.id.youtubecloseButton);
                close.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        frameLayout.setVisibility(View.GONE);
                        if (!mMediaPlayer.isPlaying()) {
                            mMediaPlayer.start();
                        }
           notification = new Runnable() {

                public void run() {
                    start();
                }
            };
            handler.postDelayed(notification, 1000); 
                    }
                });
...