2011-11-22 59 views
1

我有一個方法,我從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){}爲真,我做我的音樂暫停即

而在這段時間內,我還想讓run()裏面的start()函數繼續調用。但是如果我讓音頻暫停,這不僅僅是發生。在這種情況下,控制權完全喪失。而就按下圖像按鈕關閉,我試圖再次使音頻這樣

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

音頻播放一直現在玩,但滑板/搜索條是不動的,因爲開始()內通知是沒有得到所謂的。

是否有人知道爲什麼會發生這種情況?

注意:如果我不讓媒體播放器暫停,它會正常工作。當我讓音頻暫停時,我得到問題onky

+0

甚至沒有1人有這種情況的答案嗎? – tejas

回答

0

我最終解決了這個問題,它可能不是標準方法。但它爲我工作。

我只是複製

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