예제 소스가 있긴 하지만, 예제 소스를 잘 못 찾았다.(보는 법도 몰랐다.) 그래서 외국 서버를 찾았다.


 이걸 그대로 복사 붙이기 하면, 플레이어에 연결이 된다.[각주:1]


 Android 프로젝트에서 AndroidManifast.xml에 추가 시켜줘야하는게 있다.


 필자는 다음과 같이 설정했다.


 

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.sung.android" >
    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme" >
        <activity android:name=".Main_Activity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>
cs


 이렇게 처리하였다.


 여기서 중요한 것은 인터넷 통신을 위해서 권한을 하나 받아야된다.


 

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



 이것을 설정한 다음, Youtube API 라이브러리에서 제공하는 플레이어 XML을 추가한다.


1
2
3
4
5
6
    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/youtube_player"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:padding="5dp" />
cs


 이 다음에 소스를 짜면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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.ErrorReason;
import com.google.android.youtube.player.YouTubePlayer.PlaybackEventListener;
import com.google.android.youtube.player.YouTubePlayer.PlayerStateChangeListener;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.android.youtube.player.YouTubePlayerFragment;
import com.google.android.youtube.player.YouTubePlayerView;
public class Main_Activity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {
    public static final String API_KEY = "";//사용자가 얻은 API Key을 입력하면 된다.(개발자 콘솔에 얻은 것.)
    
    //http://youtu.be/<VIDEO_ID>
    public static final String VIDEO_ID = "";
    private static final int RQS_ErrorDialog = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /** attaching layout xml **/
        setContentView(R.layout.activity_main_);
        /** Initializing YouTube player view **/
        YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player);
        youTubePlayerView.initialize(API_KEY, this);
    }
    @Override
    public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) {
        if (result.isUserRecoverableError()) {
            result.getErrorDialog(this, RQS_ErrorDialog).show();
        } else {
            Toast.makeText(this,
                    "YouTubePlayer.onInitializationFailure(): " + result.toString(),
                    Toast.LENGTH_LONG).show();
        }
    }
    @Override
    public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) {
        /** add listeners to YouTubePlayer instance **/
        player.setPlayerStateChangeListener(playerStateChangeListener);
        player.setPlaybackEventListener(playbackEventListener);
        /** Start buffering **/
        if (!wasRestored) {
            player.cueVideo(VIDEO_ID);
        }
    }
    private PlaybackEventListener playbackEventListener = new PlaybackEventListener() {
        @Override
        public void onBuffering(boolean arg0) {
        }
        @Override
        public void onPaused() {
        }
        @Override
        public void onPlaying() {
        }
        @Override
        public void onSeekTo(int arg0) {
        }
        @Override
        public void onStopped() {
        }
    };
    private PlayerStateChangeListener playerStateChangeListener = new PlayerStateChangeListener() {
        @Override
        public void onAdStarted() {
        }
        @Override
        public void onError(ErrorReason arg0) {
        }
        @Override
        public void onLoaded(String arg0) {
        }
        @Override
        public void onLoading() {
        }
        @Override
        public void onVideoEnded() {
        }
        @Override
        public void onVideoStarted() {
        }
    };
}
cs


 여기서 Android 버전에 따라서 바뀐 것인지 모르겠지만, 초기화 작업에서 오류가 뜨는 걸 확인 되었다.

 그래서, 다음과 같은 소스가 적용 된 것이다.

1
2
3
4
5
6
7
8
9
10
    @Override
    public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) {
        if (result.isUserRecoverableError()) {
            result.getErrorDialog(this, RQS_ErrorDialog).show();
        } else {
            Toast.makeText(this,
                    "YouTubePlayer.onInitializationFailure(): " + result.toString(),
                    Toast.LENGTH_LONG).show();
        }
    }
cs


 제공한 사이트와 다른 점은 이것인데, 초기화 작업이 잘못 되었을 경우.

 원래, Youtube에 들어가서 작업 할 수 있도록 제작한 것이다.


 전체 구조에선


 onInitializationFailure()는 초기화 하는 도중에 오류가나서 초기화가 제대로 안될 경우이다. 이 경우는 Key가 문제가 있거나, 플레이어로 접속이 안되는 문제등 다양한 문제가 있을 경우 작동한다.


 onInitializationSuccess()는 초기화가 성공하면 작동되는 것이다. 여기서 player등의 초기화 작업등을 하는 것이다.

 즉, YouTube의 연결에서 사용되는 장치들을 연결 및 설정하는 것이다.


 여기서 Player의 이벤트를 연결해서 처리하는 Listener을 연결되게 된다.

Posted by JunkMam
,