2017-05-02 1 views
0

Ich habe ein Webview, in dem ich die Youtube-Suchseite präsentiere. (https://www.youtube.com/results?search_query=) Ich möchte die Video-ID des Clips, den der Benutzer gedrückt hat, erhalten. Bisher habe ich das ohne Erfolg folgende versucht:Wie bekomme ich eine Video-ID von einem Klick auf die Youtube-Suchseite? Link in einer Webansicht

1) Verwendung von shouldOverrideUrlLoading - ist nicht aufgerufen wird, wenn auf dem Videoclip auf der Suche

public WebViewClient getWebViewClient() 
{ 
    return new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Log.d("TAG","called overide url"); 
      if (url.startsWith(YOUTUBE_VIDEO_URL)) { 
       setVideoIdFromLink(url); 

       return true; 
      } 
      else 
      { 
       Log.d("GABI","url:"+url); 
      } 
      return false; 
     } 
     /* 
     public void onLoadResource (WebView view, String url){ 

      if(url.startsWith(YOUTUBE_VIDEO_URL)){ 
       setVideoIdFromLink(url); 
      } 
     }*/ 
    }; 
} 

2) Einstellen eines onTouchListener drücken - Methode immer wieder zurückkehren Typ 0 Extras null

private OnTouchListener linkClickTouch() 
{ 
    return new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        startClickTime = Calendar.getInstance().getTimeInMillis(); 
        break; 
       } 
       case MotionEvent.ACTION_UP: { 
        long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; 
        if(clickDuration < MAX_CLICK_DURATION) { 
         v.performClick(); 
        } 
       } 
      } 
      return true; 
     } 
     }; 
    } 

die Klick-Aktion:

private OnClickListener linkClick() 
    { 

     return new OnClickListener() 
     { 
      public void onClick(View v) { 


       final WebView webview = (WebView) v; 
       final WebView.HitTestResult result = webview.getHitTestResult(); 
       Log.d("TAG", "result:"+result.getType()+"\nextras:"+ 
       result.getExtra()); 


       if (result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) { 

       } 

       if (result.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { 

       } 

       if (result.getType() == WebView.HitTestResult.IMAGE_TYPE) { 

       } 


      } 
     }; 
    } 

Ich weiß, dass ich wahrscheinlich die Youtube-API verwenden kann, aber ich möchte das erreichen, ohne eine Suchaktivität aufzubauen, die Ergebnisse anzeigen wird, nur um die ID zu finden, wenn bereits eine anständige Suchseite existiert.

Antwort

0

nach vielen Versuch und Irrtum zu extrahieren: shouldOverrideUrlLoading oder onPageStarted wird nie genannt.

Sie verwenden sollten -

public void onLoadResource (WebView view, String url) 
{ 
    if(url.startsWith("https://m.youtube.com/watch?")) 
    { 

     setVideoIdFromLink(url); 
     view.stopLoading(); 
    } 
} 

public String setVideoIdFromLink(String url) 
{ 
    //get the video id from the link 
    String[] args=url.split("v="); 
    String videoId=args[args.length-1]; 

    return videoId; 
} 
0

versuchen diese Youtude Id

String pattern = "(?<=watch\\?v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\\&\\?\\n]*"; 

Pattern compiledPattern = Pattern.compile(pattern); 
Matcher matcher = compiledPattern.matcher(url); //url is youtube url for which you want to extract the id. 
if (matcher.find()) { 
    return matcher.group(); 
} 

in webview

 public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Log.d("TAG","called overide url"); 
      if (url.startsWith(YOUTUBE_VIDEO_URL)) { 
       String pattern = "(?<=watch\\v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\\&\\?\\n]*"; 

       Pattern compiledPattern = Pattern.compile(pattern); 
       Matcher matcher = compiledPattern.matcher(url); 
       if (matcher.find()) { 
        String id = matcher.group(); 
       } 

       return true; 
      } 
      else 
      { 
       Log.d("GABI","url:"+url); 
      } 
      return false; 
     } 
+0

das Problem ist, dass die Methode nicht aufgerufen wird - den Code bedeutet, die Sie erwähnt nicht erreicht werden, gehen (ich nicht Log.d (siehe“ TAG "," overide url "); Massagen einmal auf den Clip klicken), ich denke, es hat etwas mit Javascript zu tun, um die Seite zu laden –

Verwandte Themen