Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在webview中侦听youtube对象的状态_Android_Youtube Api_Android Webview - Fatal编程技术网

Android 如何在webview中侦听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

我将在活动中嵌入一个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;
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对象。