연습
Android Youtube API - 2. Youtube API을 이용한 플레이어 실행 시키기 -
JunkMam
2015. 12. 4. 20:17
예제 소스가 있긴 하지만, 예제 소스를 잘 못 찾았다.(보는 법도 몰랐다.) 그래서 외국 서버를 찾았다.
이걸 그대로 복사 붙이기 하면, 플레이어에 연결이 된다. 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을 연결되게 된다.