Android:AlertDialog中的YouTube视频

Android:AlertDialog中的YouTube视频,android,youtube,youtube-api,android-alertdialog,android-youtube-api,Android,Youtube,Youtube Api,Android Alertdialog,Android Youtube Api,我是Android编程新手!我想知道是否有可能创建一种弹出视图(类似于警报对话框),您可以在其中播放YouTube视频! 我试过了,但失败了 你能帮我吗?我知道如何在不同的活动上播放YouTube视频,但我不知道如何在一种警报对话框中播放 谢谢大家 M 这是我的代码: b1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v)

我是Android编程新手!我想知道是否有可能创建一种弹出视图(类似于警报对话框),您可以在其中播放YouTube视频! 我试过了,但失败了

你能帮我吗?我知道如何在不同的活动上播放YouTube视频,但我不知道如何在一种警报对话框中播放

谢谢大家

M

这是我的代码:

b1.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    //Intent i = new Intent(PaginaRisultati.this, YTActivity.class);
                    final Dialog dialog = new Dialog(PaginaRisultati.this);

                    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                    dialog.setContentView(R.layout.playerview_demo);
                    YouTubePlayerView youTubeView = (YouTubePlayerView) dialog.findViewById(R.id.youtube_view);
                    OnInitializedListener oil = new YouTubePlayer.OnInitializedListener() {

                        @Override
                        public void onInitializationSuccess(Provider provider, YouTubePlayer player,
                                boolean wasRestored) {
                             if (!wasRestored) {
                                  player.cueVideo("lHtJPFLgizw");
                                }

                        }

                        @Override
                        public void onInitializationFailure(Provider provider,
                                YouTubeInitializationResult errorReason) {
                            if (errorReason.isUserRecoverableError()) {
                                  errorReason.getErrorDialog(PaginaRisultati.this, RECOVERY_DIALOG_REQUEST).show();
                                } else {
                                  String errorMessage = String.format("ERROR!!", errorReason.toString());
                                  Toast.makeText(PaginaRisultati.this, errorMessage, Toast.LENGTH_LONG).show();
                                }

                        }
                    };
                    youTubeView.initialize("MY_APY_KEY", oil);

                    dialog.show();

                }

            });
对话框的XML文件:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

  <com.google.android.youtube.player.YouTubePlayerView
      android:id="@+id/youtube_view"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

</LinearLayout>

这是LogCat中的错误:

06-11 16:57:10.225: E/AndroidRuntime(1872): FATAL EXCEPTION: main
06-11 16:57:10.225: E/AndroidRuntime(1872): Process: it.sii.android.jobaroundu, PID: 1872
06-11 16:57:10.225: E/AndroidRuntime(1872): android.view.InflateException: Binary XML file line #28: Error inflating class com.google.android.youtube.player.YouTubePlayerView
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.createView(LayoutInflater.java:620)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.app.Dialog.setContentView(Dialog.java:477)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at it.sii.android.jobaroundu.PaginaRisultati$MyExpandableListAdapter$3.onClick(PaginaRisultati.java:287)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.View.performClick(View.java:4438)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.View$PerformClick.run(View.java:18422)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.os.Handler.handleCallback(Handler.java:733)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.os.Handler.dispatchMessage(Handler.java:95)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.os.Looper.loop(Looper.java:136)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.app.ActivityThread.main(ActivityThread.java:5017)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at java.lang.reflect.Method.invokeNative(Native Method)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at java.lang.reflect.Method.invoke(Method.java:515)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at dalvik.system.NativeStart.main(Native Method)
06-11 16:57:10.225: E/AndroidRuntime(1872): Caused by: java.lang.reflect.InvocationTargetException
06-11 16:57:10.225: E/AndroidRuntime(1872):     at java.lang.reflect.Constructor.constructNative(Native Method)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at android.view.LayoutInflater.createView(LayoutInflater.java:594)
06-11 16:57:10.225: E/AndroidRuntime(1872):     ... 19 more
06-11 16:57:10.225: E/AndroidRuntime(1872): Caused by: java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity  which extends YouTubeBaseActivity as its context.
06-11 16:57:10.225: E/AndroidRuntime(1872):     at com.google.android.youtube.player.YouTubePlayerView.<init>(Unknown Source)
06-11 16:57:10.225: E/AndroidRuntime(1872):     at com.google.android.youtube.player.YouTubePlayerView.<init>(Unknown Source)
06-11 16:57:10.225: E/AndroidRuntime(1872):     ... 22 more
06-11 16:57:10.225:E/AndroidRuntime(1872):致命异常:main
06-11 16:57:10.225:E/AndroidRuntime(1872):进程:it.sii.android.jobaroundu,PID:1872
06-11 16:57:10.225:E/AndroidRuntime(1872):android.view.InflateException:二进制XML文件行#28:错误:对类com.google.android.youtube.player.YouTubePlayerView进行充气
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.LayoutInflater.createView(LayoutInflater.java:620)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android上。视图。布局平坦。充气(布局平坦。java:353)
06-11 16:57:10.225:E/AndroidRuntime(1872):位于com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.app.Dialog.setContentView(Dialog.java:477)上
06-11 16:57:10.225:E/AndroidRuntime(1872):at it.sii.android.jobaroundu.PaginaRisultati$myexpandablelistapter$3.onClick(PaginaRisultati.java:287)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.view.performClick(view.java:4438)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.view$PerformClick.run(view.java:18422)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.os.Handler.handleCallback(Handler.java:733)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.os.Handler.dispatchMessage(Handler.java:95)上
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.os.Looper.loop(Looper.java:136)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.app.ActivityThread.main(ActivityThread.java:5017)上
06-11 16:57:10.225:E/AndroidRuntime(1872):位于java.lang.reflect.Method.Invokenactive(本机方法)
06-11 16:57:10.225:E/AndroidRuntime(1872):位于java.lang.reflect.Method.invoke(Method.java:515)
06-11 16:57:10.225:E/AndroidRuntime(1872):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-11 16:57:10.225:E/AndroidRuntime(1872):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-11 16:57:10.225:E/AndroidRuntime(1872):在dalvik。系统。本地启动。主要(本地方法)
06-11 16:57:10.225:E/AndroidRuntime(1872):由以下原因引起:java.lang.reflect.InvocationTargetException
06-11 16:57:10.225:E/AndroidRuntime(1872):位于java.lang.reflect.Constructor.constructNative(本机方法)
06-11 16:57:10.225:E/AndroidRuntime(1872):位于java.lang.reflect.Constructor.newInstance(Constructor.java:423)
06-11 16:57:10.225:E/AndroidRuntime(1872):在android.view.LayoutInflater.createView(LayoutInflater.java:594)
06-11 16:57:10.225:E/AndroidRuntime(1872):。。。还有19个
06-11 16:57:10.225:E/AndroidRuntime(1872):原因:java.lang.IllegalStateException:只能使用扩展YouTubeBaseActivity作为其上下文的活动创建YouTubePlayerView。
06-11 16:57:10.225:E/AndroidRuntime(1872):在com.google.android.youtube.player.YouTubePlayerView(未知来源)
06-11 16:57:10.225:E/AndroidRuntime(1872):在com.google.android.youtube.player.YouTubePlayerView(未知来源)
06-11 16:57:10.225:E/AndroidRuntime(1872):。。。还有22个

我通过使我的活动看起来像一个对话框来完成它。我不得不求助于这个解决方案,因为我必须在片段中显示YouTubeplyer,并且不允许在类扩展片段中嵌套标记。代码如下:

public class YoutubeDialogActivity extends YouTubeBaseActivity implements
    YouTubePlayer.OnInitializedListener {
public static final String API_KEY = "your api kery from google";
public static  String VIDEO_ID ;
private YouTubePlayer youTubePlayer;
private YouTubePlayerFragment youTubePlayerFragment;
private static final int RQS_ErrorDialog = 1;
private MyPlayerStateChangeListener myPlayerStateChangeListener;
private MyPlaybackEventListener myPlaybackEventListener;
String log = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.youtube_player_dialog_activity);
    Bundle bundle = getIntent().getExtras();
    VIDEO_ID = bundle.getString("video_id");
    youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager()
            .findFragmentById(R.id.youtubeplayerfragment);
    youTubePlayerFragment.initialize(API_KEY, this);
    myPlayerStateChangeListener = new MyPlayerStateChangeListener();
    myPlaybackEventListener = new MyPlaybackEventListener();
}

@Override
public void onInitializationFailure(Provider provider,
        YouTubeInitializationResult result) {
    if (result.isUserRecoverableError()) {
        result.getErrorDialog(this, RQS_ErrorDialog).show();
    }
}

@Override
public void onInitializationSuccess(Provider provider,
        YouTubePlayer player, boolean wasRestored) {
    PlayerStyle style = PlayerStyle.MINIMAL;
    player.setPlayerStyle(style);
    youTubePlayer = player;
    youTubePlayer.setPlayerStateChangeListener(myPlayerStateChangeListener);
    youTubePlayer.setPlaybackEventListener(myPlaybackEventListener);
    if (!wasRestored) {
        player.cueVideo(VIDEO_ID);
    }
}
private final class MyPlayerStateChangeListener implements
        PlayerStateChangeListener {
    @Override
    public void onAdStarted() {
    }
    @Override
    public void onError(
            com.google.android.youtube.player.YouTubePlayer.ErrorReason arg0) {
    }
    @Override
    public void onLoaded(String arg0) {
    }
    @Override
    public void onLoading() {
    }
    @Override
    public void onVideoEnded() {
        finish();
    }
    @Override
    public void onVideoStarted() {
    }
}
}
以下是清单文件中的主题:

<activity
        android:name="com.proshore.rwd.activity.YoutubeDialogActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Dialog" >
    </activity>

根据崩溃事件,异常是不言自明的:

只能使用扩展YouTubeBaseActivity作为其上下文的活动创建YouTubePlayerView


这也是我选择将活动设置为对话框的原因之一。

只需在AndroidManiFest.xml文件中将活动主题更改为theme.dialog即可

范例

<activity
        android:name=".Activities.YoutubeVideoActivity"
        android:theme="@android:style/Theme.Dialog"/>


注意:您的活动应该扩展到YouTubeBaseActivity

@user3649608 u r欢迎我知道它在我的live应用程序中使用过我使用过您的代码,正如我所说,它工作得很好,但YouTube视频非常暗。。。我能做些什么使它更明亮?在什么手机或平台版本上??试着在oncreate上增加屏幕亮度,然后在onpauseIt上恢复到原来的亮度。我认为这更像是一个风格问题,因为屏幕上似乎有一种黑色的几乎透明的层it@user3649608我也可以在我的播放器视图中看到透明层。。我该如何删除它谢谢!为我工作。此外,任何“对话”主题都可以用于样式。例如-
android:theme=“@android:style/theme.Material.Light.Dialog.NoActionBar”