Android 如何在webview中侦听youtube对象的状态
我将在活动中嵌入一个youtube播放器。我必须检查它是否正在播放或已经完成。这是密码Android 如何在webview中侦听youtube对象的状态,android,youtube-api,android-webview,Android,Youtube Api,Android Webview,我将在活动中嵌入一个youtube播放器。我必须检查它是否正在播放或已经完成。这是密码 package com.example.videotest; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.json.JSONException; import android.net.Uri; import android.os.Bundle; import android.os.Handler; im
package com.example.videotest;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.Toast;
public class MainActivity extends Activity {
WebView webview;
@SuppressLint({ "SetJavaScriptEnabled", "NewApi", "NewApi" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String ytId = getYoutubeID("http://youtu.be/GDka8VKLMJY");
final String iframe = "<html>" +
"<body>" +
"<object width="+"300"+"height="+"220"+">" +
"<param name=\"movie\" value=\"https://www.youtube.com/v/"+ytId+"?autoplay=&enablejsapi=1&modestbranding=1&rel=0&showinfo=0&autohide=1&theme=light&version=3\">" +
"</param>" +
"<param name="+"allowFullScreen"+ "value="+"false"+">" +
"</param>" +
"<param name="+"allowScriptAccess"+"value="+"always"+">" +
"</param>" +
"<embed src=\"https://www.youtube.com/v/"+ytId+"?autoplay=1&enablejsapi=1&modestbranding=1&rel=0&showinfo=0&autohide=1&theme=light&version=3\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" allowScriptAccess=\"always\" width=\"300\" height=\"220\">" +
"</embed>" +
"</object>" +
"</body>" +
"<html>";
ImageView play = (ImageView)findViewById(R.id.ImageView1);
play.setScaleType(ImageView.ScaleType.FIT_XY);
play.getLayoutParams().height=200;
play.getLayoutParams().width=-1;
webview=(WebView) findViewById(R.id.webView1);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginState(PluginState.ON);
webview.setBackgroundColor(Color.parseColor("#00000000"));
play.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
webview.loadData(iframe, "text/html", "utf-8");
}});
}
public String getYoutubeID (String URL){
String youtubeId = "";
String pattern = "https?:\\/\\/(?:[0-9A-Z-]+\\.)?(?:youtu\\.be\\/|youtube\\.com\\S*[^\\w\\-\\s])([\\w\\-]{11})(?=[^\\w\\-]|$)(?![?=&+%\\w]*(?:['\"][^<>]*>|<\\/a>))[?=&+%\\w]*";
Pattern compiledPattern = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
CharSequence cs = URL;
Matcher matcher = compiledPattern.matcher(cs);
if(matcher.find()){
youtubeId=matcher.group(1);
Toast.makeText(getBaseContext(), matcher.group(1), Toast.LENGTH_LONG).show();
}
return youtubeId;
}
}
package com.example.videotest;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入org.json.JSONException;
导入android.net.Uri;
导入android.os.Bundle;
导入android.os.Handler;
导入android.os.HandlerThread;
导入android.annotation.SuppressLint;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Color;
导入android.view.Menu;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.webkit.WebSettings.PluginState;
导入android.webkit.WebView;
导入android.widget.ImageView;
导入android.widget.ImageView.ScaleType;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
网络视图;
@SuppressLint({“SetJavaScriptEnabled”、“NewApi”、“NewApi”})
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串ytId=getYoutubeID(“http://youtu.be/GDka8VKLMJY");
最后一个字符串iframe=“”+
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"" +
"";
ImageView播放=(ImageView)findViewById(R.id.ImageView1);
play.setScaleType(ImageView.ScaleType.FIT_XY);
play.getLayoutParams().height=200;
play.getLayoutParams().width=-1;
webview=(webview)findViewById(R.id.webView1);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginState(PluginState.ON);
setBackgroundColor(Color.parseColor(#00000000”);
play.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
loadData(iframe,“text/html”,“utf-8”);
}});
}
公共字符串getYoutubeID(字符串URL){
字符串youtubeId=“”;
String pattern=“https:\\\/\\/(?:[0-9A-Z-]+\\)?(?:youtu\\\.be\\/\\\/\\\\.com\\S*[^\\w\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/(?!![?=&+%\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
Pattern compiledPattern=Pattern.compile(Pattern,Pattern.CASE不区分大小写);
CharSequence cs=URL;
Matcher Matcher=compiledPattern.Matcher(cs);
if(matcher.find()){
youtubeId=matcher.group(1);
Toast.makeText(getBaseContext(),matcher.group(1),Toast.LENGTH_LONG.show();
}
返回youtubeId;
}
}
如何跟踪视频是否正在播放?谢谢您的建议!您是否考虑过使用YouTube Android Player API?它提供了Java API,因此您不需要包含WebView,使用此机制播放比使用WebView更可靠。我想您可以尝试包含YT API,有一些调用n处理一些事件,如播放、停止……看这里:我知道有一个javascript onstatechange,但如何将其与上面的对象连接?如果您想将您的活动与webview javascript连接,则必须与javascript进行交互:这里有一个链接,用代码示例解释了这一点:)谢谢您的建议在上面的代码中,我没有使用任何javascript。我知道有一种方法可以与java和javascript通信,但我想知道的是,是否有一种方法可以在webView中侦听html对象。或者如何使用java侦听上面的html对象。