Cách tạo một ứng dụng chạy video trên Android application
Bài đăng này đã không được cập nhật trong 3 năm
Chào ace. Hôm nay tôi sẽ trình bày một chút hiểu biết mà tôi đã tìm hiểu được về làm thế nào để phát triển một ứng dụng về video trên android.
Có rất nhiều cách để phát triển một ứng dụng như vậy, hoặc là chạy trực tiếp video trên client(cái này mà chạy đến 2 cái video thì dung lượng ngập face), hoặc là chạy video từ một đường link mà bạn đã upload lên hosting của mình, hoặc là chạy video từ một hosting khác nhưng theo tôi cách hay nhất đó là chạy luôn các video từ kênh Youtube. Giảm thiểu được mọi chi phí, video load nhanh. Vì vậy trong bài này tôi chỉ tập trung vào cách để có thể tạo ra một ứng dụng chạy video youtube trên android.
Để làm được công việc trên thì trước hết chúng ta cần phải có một developer key để sử dụng Youtube API. Có thể đăng ký tại đây Google's YouTube Developer.
-
Tạo project - android
-
Tiếp theo chúng ta sẽ lấy các thư viện sau:
- YouTube Android Player API: Thư viện này dùng cho việc nhúng và điều khiển các video Youtube, download tại đây.
- YouTube Data API v3 Client Library for Java giúp truy vấn thông tin trên Youtube.
- Picasso Giúp lấy và hiển thị hình ảnh từ xa.
Ok, sau khi đã lấy các thư viện về, copy YouTubeAndroidPlayerApi.jar, picasso..xxx.jar vào folder Libs. Giải nén google-api-services-youtube-v3-rev130-java-1.19.1.zip và cũng copy vào Libs.
Trong file AndroidManifest.xml nhớ thêm permission internet:
<uses-permission android:name="android.permission.INTERNET"/>
Ứng dụng của chúng ta có 2 activity nên định nghĩa luôn và ngay trong file xml:
<activity android:name=".MainActivity"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".PlayerActivity"
android:screenOrientation="landscape" />
Thêm nội dung file string.xml như sau:
<resources>
<string name="app_name">SimplePlayer</string>
<string name="search">Search</string>
<string name="failed">Failed to initialize Youtube Player</string>
<string name="error_player">There was an error initializing the YouTubePlayer (%1$s)</string>
</resources>
Giờ chúng ta cùng tạo các layout: Đặt tên file xml thế nào tùy bạn nhé. Nội dung file activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/thumb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
Thêm một layout activity_player.xml cho xem video:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Một lớp lưu các biến static final như key api, key video test ...
package com.framgia.youtubeapi;
/**
* Static container class for holding a reference to your YouTube Developer Key.
*/
public class DeveloperKey {
public static final String DEVELOPER_KEY = "AIzaSyC5ameO6l8JqynlhcWFHC9v75mzgbyymkQ";
public static final String KEY_VIDEO = "Kgqu-St99Po";
public static final String TITLE_VIDEO = "Test Youtube API";
}
Tạo class YoutubeBaseActivity.java. Class này tôi lây từ google.
/*
* Copyright 2012 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.framgia.youtubeapi;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.hathi.simpleplayer.R;
import android.content.Intent;
import android.widget.Toast;
/**
* An abstract activity which deals with recovering from errors which may occur during API
* initialization, but can be corrected through user action.
*/
public abstract class YouTubeFailureRecoveryActivity extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener {
private static final int RECOVERY_DIALOG_REQUEST = 1;
@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(DeveloperKey.DEVELOPER_KEY, this);
}
}
protected abstract YouTubePlayer.Provider getYouTubePlayerProvider();
}
Ok, sắp xong. giờ chúng ta cùng code cho file MainActivity
package com.framgia.youtubeapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
import com.framgia.youtubeapi.R;
import com.squareup.picasso.Picasso;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton thub = (ImageButton)findViewById(R.id.thumb);
TextView txtTitle = (TextView)findViewById(R.id.title);
String url = "http://img.youtube.com/vi/"+DeveloperKey.KEY_VIDEO+"/default.jpg"; // Đây là cách lấy ảnh icon cho video đó. Sau đó hiển thị nó vào view bằng Picasso
Picasso.with(MainActivity.this).load(url).into(thub);
txtTitle.setText(DeveloperKey.TITLE_VIDEO);
thub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Khi click vào icon video thì sẽ hiện tới trang xem video
Intent intent = new Intent(MainActivity.this, PlayerActivity.class);
startActivity(intent);
}
});
}
}
Code tiếp file show video, ngắn thôi:
package com.framgia.youtubeapi;
import com.framgia.youtubeapi.R;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;
import android.os.Bundle;
public class PlayerActivity extends YouTubeFailureRecoveryActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.player_view);
youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
boolean wasRestored) {
if (!wasRestored) {
player.cueVideo(DeveloperKey.KEY_VIDEO);
}
}
@Override
protected YouTubePlayer.Provider getYouTubePlayerProvider() {
return (YouTubePlayerView) findViewById(R.id.youtube_view);
}
}
Đã xong, giờ đây bạn có thể chạy ngon lành bất cứ video nào. Hoặc bạn có thể tạo một listview để show thật nhiều danh sách các video và xem chúng. Nếu bạn chưa làm bao giờ thì từ bài viết này hy vọng bạn có thể phát triển cho mình những ý tưởng to lớn và táo bạo. Chúc bạn thành công.
Đây là file APK build cho bạn chạy thử.
Pass giải nén là: recruit.framgia.vn https://drive.google.com/file/d/0B7td9WR1ZtQ0QTdxd1dJLVhZR3c/view?usp=sharing
All rights reserved