2013-05-17 4 views
0

Я реализую видеопроигрыватель youtube с помощью video.js, я передаю url динамически в js и позволяю video.js воспроизводить видео. Я хочу сделать, чтобы js уведомил сторону android после окончания видео, поэтому я добавляю завершенное событие, чтобы вызвать метод android. Но это не работает, кто-нибудь знает, в чем проблема?videojs addEvent не работает в android webview

Я реализовал jsinterface "AndroidFunction" в андроида стороне

Android сторона:

public class MainActivity extends Activity { 
/** 
* Called when the activity is first created. 
*/ 
WebView webView; 
String ytUrl; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_main); 
    final RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.layout1); 
    LayoutParams params = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT); 
    mainLayout.setLayoutParams(params); 
    ytUrl = "http://www.youtube.com/watch?v=2NS1umhAAeg"; 
    webView = new WebView(this); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setPluginsEnabled(true); 
    final MyJavaScriptInterface jsInterface = new MyJavaScriptInterface(
      this); 
    webView.addJavascriptInterface(jsInterface, "AndroidFunction"); 
    webView.setWebChromeClient(new WebChromeClient()); 
    webView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      webView.setClickable(false); 
      return false; 
     } 

    }); 
    webView.setWebViewClient(new WebViewClient() { 
     boolean calledOnce; 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return false; 
     } 

     /* 
     * (non-Javadoc) 
     * 
     * @see 
     * android.webkit.WebViewClient#onPageFinished(android.webkit.WebView 
     * , java.lang.String) 
     */ 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      if (calledOnce == false) { 
       webView.loadUrl("javascript:callFromActivity(\"" + ytUrl 
         + "\")"); 
      } 
      calledOnce = true; 
     } 
    }); 

    webView.loadUrl("file:///android_asset/123.html"); 

    mainLayout.addView(webView); 
} 

public class MyJavaScriptInterface { 
    Context mContext; 

    MyJavaScriptInterface(Context c) { 
     mContext = c; 
    } 

    public void showToast(String toast) { 
     Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
    } 

    public void openAndroidDialog() { 
     AlertDialog.Builder myDialog = new AlertDialog.Builder(
       MainActivity.this); 
     myDialog.setTitle("Notice"); 
     myDialog.setMessage("Android side has been called"); 
     myDialog.setPositiveButton("ON", null); 
     myDialog.show(); 
    } 
} 
} 

В Js стороны, я реализовал функцию callAndroid для вызова андроид JsInterface "AndroidFunction", и использовать addEvent ("закончился", callAndroid), чтобы вызвать функцию

Js сторона:

<script language="javascript"> 
    var url; 

    function callFromActivity(msg){ 
     url = msg; 
     var videoEl = document.createElement("video"); 
     videoEl.className= "video-js vjs-default-skin"; 
     videoEl.width = "360"; 
     videoEl.height = "595"; 
     videoEl.setAttribute("id", "example_video_1"); 
     document.getElementById("vid").appendChild(videoEl); 

     _V_("example_video_1").ready(function(){ 

      var myPlayer = this; 
      myPlayer.src({ type: "video/youtube", src: url});    
      var mainTrack = myPlayer.values.src; 
      var startedOnce = false; 
      var endedOnce = false; 
      var firstQuartileOnce = false; 
      var midpointOnce = false; 
      var thirdQuartileOnce = false; 





      var callAndroid = function() { 
       AndroidFunction.openAndroidDialog(); 
      } 

      myPlayer.addEvent("ended", callAndroid); 
     }); 

    } 
    </script> 

ответ

Смежные вопросы