按下按钮后,Android App无法播放YouTube视频YouTube播放器无法启动吗?

时间:2019-10-23 02:29:28

标签: android youtubeplayer

我有一个类似的应用,其代码非常相似,可以播放YouTube视频,但不会。我试图从Google获得一个不同的API KEY,但这没有什么不同。 当我单击启动YouTube播放器的按钮时,该应用程序便崩溃了。

这是java类:

package xxxxxxxxxxxxxxxxxxx;

import android.os.Bundle;
import android.widget.Toast;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerView;

public class Level_1_Training extends YouTubeBaseActivity implements
        YouTubePlayer.OnInitializedListener{

    public static final String API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public static final String VIDEO_ID = "Bm7WMvpjDec";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        YouTubePlayerView youTubePlayerView = (YouTubePlayerView)findViewById(R.id.youtubeplayerview);
        youTubePlayerView.initialize(API_KEY, this);
    }

    @Override
    public void onInitializationFailure(Provider provider,
                                        YouTubeInitializationResult result) {
        Toast.makeText(getApplicationContext(),
                "onInitializationFailure()",
                Toast.LENGTH_LONG).show();
    }

    @Override
    public void onInitializationSuccess(Provider provider, YouTubePlayer player,
                                        boolean wasRestored) {
        player.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL);// it's a simple style that doesn't show the YouTube logo and it prevents users to find the real source of the YouTube video
        if (!wasRestored) {
            player.cueVideo(VIDEO_ID);
        }
    }

}

并显示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="creativemind.babyread2">

    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


    <application

        android:allowBackup="true"
        android:icon="@drawable/babyreadappicon"
        android:label="@string/app_name">

        <activity
            android:screenOrientation="portrait"
            android:name="creativemind.babyread2.Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:screenOrientation="portrait"
            android:name="creativemind.babyread2.Menu"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="creativemind.babyread2.MENU" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity

            android:screenOrientation="landscape"
            android:name="creativemind.babyread2.Level_1_Training"
            android:label="Level 1"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

            <intent-filter>
                <action android:name="creativemind.babyread2.LEVEL1TRAINING" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity

            android:screenOrientation="landscape"
            android:name="creativemind.babyread2.Level_1_Testing"
            android:label="Level 1 Training"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            >
            <intent-filter>
                <action android:name="creativemind.babyread2.LEVEL1TESTING" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity

            android:screenOrientation="portrait"
            android:name="creativemind.babyread2.Introduction"
            android:label="Level 1"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="creativemind.babyread2.INTRODUCTION" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>



    </application>


</manifest>

这是我在应用程序日志中得到的

10/22 22:06:04: Launching 'app' on samsung SM-J727V.
$ adb shell am start -n "creativemind.babyread2/creativemind.babyread2.Splash" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Waiting for process to come online...
Connected to process 18665 on device 'samsung-sm_j727v-52b1fcea'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
E/Zygote: isWhitelistProcess - Process is Whitelisted
E/libpersona: scanKnoxPersonas
    Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
W/SELinux: SELinux selinux_android_compute_policy_index : Policy Index[2],  Con:u:r:zygote:s0 RAM:SEPF_SM-J727V_8.1.0_0008, [-1 -1 -1 -1 0 1]
I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=creativemind.babyread2 
I/zygote64: Late-enabling -Xcheck:jni
D/TimaKeyStoreProvider: TimaKeyStore is not enabled: cannot add TimaSignature Service and generateKeyPair Service
D/ActivityThread: Added TimaKeyStore provider
I/MediaPlayer: Need to enable context aware info
V/MediaPlayer-JNI: native_setup
V/MediaPlayerNative: constructor
    setListener
V/MediaPlayer-JNI: setVolume: left 1.000000  right 1.000000
V/MediaPlayerNative: MediaPlayer::setVolume(1.000000, 1.000000)
V/MediaPlayer-JNI: setAuxEffectSendLevel: level 0.000000
V/MediaPlayerNative: MediaPlayer::setAuxEffectSendLevel(0.000000)
V/MediaPlayer-JNI: setParameter: key 1400
V/MediaPlayerNative: MediaPlayer::setParameter(1400)
V/MediaPlayer-JNI: setAudioStreamType: 3
V/MediaPlayerNative: MediaPlayer::setAudioStreamType
V/MediaPlayer-JNI: set_session_id(): 16993
V/MediaPlayerNative: MediaPlayer::setAudioSessionId(16993)
V/MediaPlayer-JNI: setDataSourceFD: fd 53
V/MediaPlayerNative: setDataSource(53, 2060780, 435840)
V/MediaPlayerNative: setVideoSurfaceTexture
V/MediaPlayerNative: prepare
V/MediaPlayerNative: message received msg=200, ext1=10973, ext2=0
W/MediaPlayerNative: info/warning (10973, 0)
V/MediaPlayerNative: callback application
V/MediaPlayerNative: back from callback
V/MediaPlayerNative: message received msg=1, ext1=0, ext2=0
    MediaPlayer::notify() prepared
    signal application thread
    callback application
V/MediaPlayerNative: prepare complete - status=0
V/MediaPlayerNative: back from callback
V/MediaPlayerNative: invoke 68
W/MediaPlayer: Use of stream types is deprecated for operations other than volume control
    See the documentation of setAudioStreamType() for what to use instead with android.media.AudioAttributes to qualify your playback use case
V/MediaPlayer-JNI: setVolume: left 1.000000  right 1.000000
V/MediaPlayerNative: MediaPlayer::setVolume(1.000000, 1.000000)
V/MediaPlayer-JNI: setAuxEffectSendLevel: level 0.000000
V/MediaPlayerNative: MediaPlayer::setAuxEffectSendLevel(0.000000)
V/MediaPlayer-JNI: setAudioStreamType: 3
V/MediaPlayerNative: MediaPlayer::setAudioStreamType
V/MediaPlayer-JNI: setLooping: 1
V/MediaPlayerNative: MediaPlayer::setLooping
V/MediaPlayer-JNI: start
V/MediaPlayerNative: start
D/OpenGLRenderer: HWUI GL Pipeline
D/InputTransport: Input channel constructed: fd=60
D/ViewRootImpl@a60997f[Splash]: setView = DecorView@1203d4c[Splash] TM=true MM=false
V/MediaPlayerNative: invoke 68
D/ViewRootImpl@a60997f[Splash]: dispatchAttachedToWindow
V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
D/ViewRootImpl@a60997f[Splash]: Relayout returned: old=[0,0][0,0] new=[0,0][720,1280] result=0x7 surface={valid=true 514885689344} changed=true
I/Adreno: QUALCOMM build                   : 160a517, I47625b5b56
    Build Date                       : 06/13/18
    OpenGL ES Shader Compiler Version: EV031.22.00.01_06_07
    Local Branch                     : 
    Remote Branch                    : 
    Remote Branch                    : 
    Reconstruct Branch               : 
D/vndksupport: Loading /vendor/lib64/hw/gralloc.msm8953.so from current namespace instead of sphal namespace.
I/Adreno: PFP: 0x005ff087, ME: 0x005ff063
D/ViewRootImpl@a60997f[Splash]: MSG_RESIZED_REPORT: frame=Rect(0, 0 - 720, 1280) ci=Rect(0, 48 - 0, 0) vi=Rect(0, 48 - 0, 0) or=1
    MSG_WINDOW_FOCUS_CHANGED 1
V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@def4e9b nm : creativemind.babyread2 ic=null
D/InputMethodManager: startInputInner - Id : 0
I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
D/InputTransport: Input channel constructed: fd=65
I/zygote64: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 2
D/libGLESv1: STS_GLApi : DTS, ODTC are not allowed for Package : creativemind.babyread2
D/OpenGLRenderer: eglCreateWindowSurface = 0x77e385ca40, 0x77e1942010
D/vndksupport: Loading /vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so from current namespace instead of sphal namespace.
D/vndksupport: Loading /vendor/lib64/hw/gralloc.msm8953.so from current namespace instead of sphal namespace.
V/MediaPlayerNative: message received msg=6, ext1=0, ext2=0
    unrecognized message: (6, 0, 0)
    callback application
    back from callback
V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@fb9e238 nm : creativemind.babyread2 ic=null
D/InputMethodManager: startInputInner - Id : 0
V/MediaPlayer-JNI: getCurrentPosition: 1171 (msec)
V/MediaPlayer: resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
    cleanDrmObj: mDrmObj=null mDrmSessionId=null
V/MediaPlayer-JNI: release
V/MediaPlayerNative: setListener
    disconnect
V/MediaPlayerNative: destructor
V/MediaPlayerNative: disconnect
D/ViewRootImpl@a60997f[Splash]: MSG_WINDOW_FOCUS_CHANGED 0
D/OpenGLRenderer: eglDestroySurface = 0x77e385ca40, 0x77e1942000
D/ViewRootImpl@a60997f[Splash]: Relayout returned: old=[0,0][720,1280] new=[0,0][720,1280] result=0x5 surface={valid=false 0} changed=true
D/InputTransport: Input channel destroyed: fd=65
D/ViewRootImpl@a60997f[Splash]: dispatchDetachedFromWindow
D/InputEventReceiver: channel 'c94978d creativemind.babyread2/creativemind.babyread2.Splash (client)' ~ Disposing input event receiver.
    channel 'c94978d creativemind.babyread2/creativemind.babyread2.Splash (client)' ~NativeInputEventReceiver.
D/InputTransport: Input channel destroyed: fd=60
V/MediaPlayer-JNI: native_finalize
    release
Process 18665 terminated.

1 个答案:

答案 0 :(得分:0)

尝试一下!

public class Level_1_Training extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {

        public static final String API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
        public static final String VIDEO_ID = "Bm7WMvpjDec";
        private static final int RECOVERY_DIALOG_REQUEST = 1;
        private YouTubePlayerView youTubeView;

        @Override
        protected void attachBaseContext(Context newBase) {
            super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_video);

            youTubeView = findViewById(R.id.youtubeplayerview);

            // Initializing video player with developer key
            youTubeView.initialize(API_KEY, this);

        }

        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
            if (!b) {
                youTubePlayer.loadVideo(VIDEO_ID);
            }
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.MINIMAL);
        }

        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) {
            if (errorReason.isUserRecoverableError()) {
                errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
            } else {
                String errorMessage = String.format(
                        getString(R.string.error_player), errorReason.toString());
                Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
            }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == RECOVERY_DIALOG_REQUEST) {
                // Retry initialization if user performed a recovery action
                getYouTubePlayerProvider().initialize(API_KEY, this);
            }
        }

        private YouTubePlayer.Provider getYouTubePlayerProvider() {
            return (YouTubePlayerView) findViewById(R.id.youtubeplayerview);
        }

    }