2017-05-26 10 views
5

काम नहीं कर रहा है मैं वेबव्यू के अंदर यूट्यूब एम्बेड वीडियो लिंक (उदा: https://www.youtube.com/embed/dQw4w9WgXcQ) पर एक पूर्णस्क्रीन बटन काम करने के लिए वेबक्रॉम क्लाइंट के उप-वर्ग को कार्यान्वित करने का प्रयास कर रहा हूं।वेबव्यू के अंदर वीडियो का पूर्णस्क्रीन बटन

VideoWebChromeClient:

public class VideoWebChromeClient extends WebChromeClient { 
    private boolean isVideoFullscreen = false; 
    private View activityNonVideoView; 
    private ViewGroup activityVideoView; 
    private View videoViewContainer; 
    private CustomViewCallback videoCallback; 
    private Window videoWindow; 

    public VideoWebChromeClient(View activityNonVideoView, ViewGroup activityVideoView, Window window) { 
     this.activityNonVideoView = activityNonVideoView; 
     this.activityVideoView = activityVideoView; 
     this.videoWindow = window; 
    } 

    @Override 
    public void onShowCustomView(View view, CustomViewCallback callback) { 
     Log.w("ENTER FULLSCREEN"); 
     videoCallback = callback; 
     videoViewContainer = view; 
     videoWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     activityNonVideoView.setVisibility(View.GONE); 
     activityVideoView.addView(videoViewContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
     activityVideoView.setVisibility(View.VISIBLE); 
     isVideoFullscreen = true; 
    } 

    @Override 
    public void onHideCustomView() { 
     if (!isVideoFullscreen) { 
      return; 
     } 
     Log.w("EXIT FULLSCREEN"); 
     activityVideoView.setVisibility(View.GONE); 
     activityVideoView.removeView(videoViewContainer); 
     activityNonVideoView.setVisibility(View.VISIBLE); 
     videoWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     videoViewContainer = null; 
     videoCallback.onCustomViewHidden(); 
     isVideoFullscreen = false; 
    } 

    public boolean onBackPressed() { 
     onHideCustomView(); 
     return isVideoFullscreen; 
    } 
    } 

WebViewActivity

public class WebViewActivity extends BaseActivity { 

    public static final String WEB_VIEW_URL_EXTRA = "URL"; 
    private boolean loadedFirstURL = true; 
    private VideoWebChromeClient mWebChromeClient; 

    @Bind(webview) 
    WebView mWebView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(provideLayoutId()); 
     String url = (String) getIntent().getSerializableExtra(WEB_VIEW_URL_EXTRA); 

     // Check if URL is YouTube/Vimeo 
     if (RegexHelper.isVideoURL(url)){ 
      // Allow Fullscreen 
      final View defaultLayout = findViewById(R.id.defaultLayout); 
      final View fullscreenLayout = findViewById(R.id.fullscreenLayout); 
      mWebChromeClient = new VideoWebChromeClient(defaultLayout, (ViewGroup) fullscreenLayout, getWindow()); 
      mWebView.setWebChromeClient(mWebChromeClient); 

      // Block external links 
      mWebView.setWebViewClient(new WebViewClient() { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        if (loadedFirstURL) { 
         loadedFirstURL = false; 
         return false; 
        } 
        return true; 
       } 
      }); 
     } 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl(url); 
    } 

     @Override 
     public void onBackPressed() { 
      if (!mWebChromeClient.onBackPressed()) 
      { 
       if (mWebView.canGoBack()) { 
        mWebView.goBack(); 
       } 
       else { 
        super.onBackPressed(); 
       } 
      } 
     } 
    } 

यह सही ढंग से पर किटकैट ख काम करता है

मैं मूल रूप से सरल this repo, यहाँ कुछ स्निपेट होते हैं, पर नॉट (मेरे पास परीक्षण करने के लिए केवल दो डिवाइस हैं): जब मैं पूर्णस्क्रीन बटन टैप करता हूं तो कभी-कभी पूर्णस्क्रीन में जाता है, लेकिन ज्यादातर बार यह "चमकता है" और पूर्ण-स्क्रीन नहीं रहता है।

और तब, जब यह पूर्ण स्क्रीन मोड में वास्तव में है, पूर्णस्क्रीन से बाहर आने के लिए बटन काम नहीं करता है (onHideCustomView सब पर नहीं बुलाया जाता है)

आप देख सकते हैं कि मैं लॉग रख दिया और देखा है कि जब "फ्लैश" होता है, onHideCustomView वास्तव में onShowCustomView ("ENTER FULLSCREEN" के तुरंत बाद "EXIT FULLSCREEN") के बाद सही कहा जाता है, मुझे समझ में नहीं आता क्यों।

धन्यवाद एक बहुत करता है, तो किसी को भी एक समाधान

+0

बस मेरे अनुभव और शोध के आधार पर एक राय: यूट्यूब वीडियो से निपटने के लिए वेबव्यू भूल जाएं: उचित यूट्यूब एपीआई पर डालने से आप हर हफ्ते के आश्चर्यजनक अपडेट को मुक्त कर देंगे। – statosdotcom

+0

@statosdotcom हाँ मुझे यह पसंद है कि मैं इसे सिर्फ YouTube ऐप में खोल सकता हूं लेकिन मैं लक्ष्य नहीं कर सकता क्योंकि लक्ष्य केवल एक वीडियो प्रदर्शित करना है और दूसरों को सुझाव देने से बचाना है। – CyrilFind

+0

हो सकता है कि एपीआई आपके लिए कुछ कॉन्फ़िगरेशन प्रदान कर सके, कुछ ठीक ट्यूनिंग की अनुमति दे। मुझे लगता है कि आपको इसे देखना चाहिए। अच्छी किस्मत। – statosdotcom

उत्तर

0

मैं भी यही मुद्दा सामना करना पड़ रहा था, लेकिन मैं इस पर घंटे बिताने के बाद यह तय करने की दिशा में मुझे इशारा करता है।

आपको बस एक किटकैट डिवाइस की UserAgent स्ट्रिंग सेट करना है। और वह यह है!

private String userAgent = "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"; 
mWebView.getSettings().setUserAgentString(userAgent); 

यह) नए उपकरणों पर onShowCustomView (के सभी अजीब कामकाज ठीक कर देंगे और onHideCustomView()। उम्मीद है कि यह मदद करता है।

+0

मेरे साथ काम नहीं करता है। – User9527

+0

यह एक कामकाज है लेकिन धन्यवाद, अगर मैं इस पर फिर से काम करता हूं तो मैं इसे ध्यान में रखूंगा। – CyrilFind

संबंधित मुद्दे