본문 바로가기

Dev/안드로이드

Do it! 안드로이드 앱 프로그래밍 유튜브 플레이어 실습

728x90
반응형

p.657 ~ 663의 내용입니다.

 

유튜브 API를 다운로드하여 jar파일을 프로젝트에 넣고 YouTubePlayerView를 사용하는 실습입니다.

 

/app/libs 폴더 안에 YouTubeAndroidPlayerApi.jar 파일을 넣고 activity_main.xml을 아래와 같이 수정했습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="시작" />

    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/playerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

 

MainActivity.java의 코드는 아래와 같습니다.

package com.example.youtube;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

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.YouTubePlayerView;

public class MainActivity extends YouTubeBaseActivity {
    YouTubePlayerView playerView;
    YouTubePlayer player;

    private static String API_KEY = "AIzaSyDWXmWuB7xjPaN5gwW2h1NtHr9nETESN7E";
    private static String videoId = "3iM_06QeZi8";

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

        initPlayer();

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playVideo();
            }
        });
    }

    public void initPlayer() {
        playerView = findViewById(R.id.playerView);
        playerView.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
                player = youTubePlayer;

                player.setPlayerStateChangeListener(new YouTubePlayer.PlayerStateChangeListener() {
                    @Override
                    public void onLoading() {
                    }

                    @Override
                    public void onLoaded(String id) {
                        Log.d("PlayerView", "onLoaded 호출됨 : " + id);

                        player.play();
                    }

                    @Override
                    public void onAdStarted() {
                    }

                    @Override
                    public void onVideoStarted() {
                    }

                    @Override
                    public void onVideoEnded() {
                    }

                    @Override
                    public void onError(YouTubePlayer.ErrorReason errorReason) {
                    }
                });
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
            }
        });
    }

    public void playVideo() {
        if (player != null) {
            if (player.isPlaying()) {
                player.pause();
            }
            player.cueVideo(videoId);
        }
    }
}

여기서 제가 겪었던 실습 시의 문제점을 공유해보려합니다.

 

문제점1.

책에 있는 videoId를 사용하려 했으나 현재 저작권 문제로 영상이 삭제되어 영상을 플레이할 수 없었습니다.

 

해결법

IU - 내 손을 잡아 콘서트 영상의 id를 넣었습니다.

 

문제점2.

책대로 코드를 입력하는데 이상한 점을 많이 느꼈습니다.

 

먼저 xml을 수정하는데 YouTubePlayerView가 자동완성이 되지 않았고

코드를 모두 입력했는데도 에러라는 메시지가 출력되었습니다.

 

해결법

build.gradle(:app)에서 dependencies를 수정해야 했습니다.

    implementation fileTree(dir: 'libs', include: ['*.jar'])

안에 위 implementation을 추가해야만 .jar 파일을 사용할 수 있었습니다.

 

분명히 이 문장을 추가하기 전에도 파일을 프로젝트 내에 넣어놨었지만 인식을 하지 못해서 에러가 났던 것입니다.

 

번외

MainActivity.java에서 실수를 했던 부분인데,

public class MainActivity extends AppCompatActivity로 그냥 두고 app을 실행시켜 에러가 나기도 했었습니다.

 

유심히 보니 extends YouTubeBaseActivity였습니다.

 

해당 부분도 신경쓰지 못해서 당황했었는데, 시행착오를 줄이는데 도움이 되었으면 좋겠습니다.

 

오늘 글은 여기서 마무리하겠습니다. 감사합니다.

728x90
반응형

"); wcs_do();