Ứng dụng Android YouTube Phát video Ý định


148

Tôi đã tạo một ứng dụng để bạn có thể tải xuống video YouTube cho Android. Bây giờ, tôi muốn nó để nếu bạn phát video trong ứng dụng gốc YouTube, bạn cũng có thể tải xuống. Để làm điều này, tôi cần biết Ý định mà ứng dụng gốc YouTube đưa ra để phát ứng dụng YouTube.
Tôi có thể thực hiện việc này một cách dễ dàng nếu tôi có chương trình YouTube trên trình giả lập của mình, vì vậy câu hỏi đầu tiên của tôi là:
1. Tôi có thể tải xuống ứng dụng YouTube cho trình giả lập của mình không, hoặc ...
2. Ý định được sử dụng khi người dùng chọn video là gì để phát lại.


này, tôi cũng đang cố gắng tạo một ứng dụng tải xuống video youtube. Vì vậy, tôi muốn biết rằng tôi phải lấy bất kỳ khóa api nào cho điều đó hoặc đơn giản là tôi có thể sử dụng webview trong ứng dụng của mình ?? @ASP
Jaydip Kalkani 15/03/18

Câu trả lời:


263

Và làm thế nào về điều này:

public static void watchYoutubeVideo(Context context, String id){
    Intent appIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + id));
    Intent webIntent = new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://www.youtube.com/watch?v=" + id));
    try {
        context.startActivity(appIntent);
    } catch (ActivityNotFoundException ex) {
        context.startActivity(webIntent);
    }
} 

Lưu ý: Cẩn thận khi bạn đang sử dụng phương pháp này, YouTube có thể tạm dừng kênh của bạn do spam, điều này đã xảy ra hai lần với tôi


5
Đạo cụ hỗ trợ ứng dụng YouTube nếu có và quay lại trình duyệt web nếu cần. Đối với những người đến với câu hỏi này, đây là câu trả lời để sử dụng.
Luke Sapan

Cách khởi chạy ứng dụng youtube để tìm kiếm thông qua từ khóa, vd. tôi muốn ứng dụng youtube được ra mắt và sau đó tìm kiếm "steve jobs"
Rusheel Jain

@RusheelJain đó sẽ là một vấn đề mới. Những gì tôi sẽ làm là tìm kiếm "văn bản tìm kiếm ý định youtube trên Android" hoặc đại loại như thế.
voghDev

2
IMHO đây sẽ là câu trả lời được chấp nhận. Cảm ơn rất nhiều!
Nacho L.

1
Đây là câu trả lời nhưng có lẽ bạn nên xóa tĩnh trong khai báo hàm
Ampersanda

176

Điều này sẽ hoạt động trên một thiết bị nhưng không phải là trình giả lập theo câu trả lời của Lemmy .

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));

Đây là người chiến thắng cho tôi, nếu bạn đã cài đặt ứng dụng youtube, nó sẽ hỏi bạn có muốn sử dụng nó không.
Tristan Warner-Smith

sử dụng mã này tôi nhận được trình chọn ý định cho youtube và trình duyệt. Làm thế nào để che giấu nó? Tôi chỉ cần liên kết trực tiếp lên trình phát youtube.
Praveen

@Praveen Chandrasekaran ứng dụng youtube có thể không khả dụng - tốt nhất là sử dụng Ý định và để hệ thống tìm ra ứng dụng đã cài đặt nào hỗ trợ yêu cầu.
cofiem

3
Bạn sẽ cần gọi setClassName trên Intent trước khi gọi startActivity, như thế này: aim.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); Xem câu trả lời của Sana cho một ví dụ mã làm việc.
xứng

Điều này không phù hợp với tôi, trên một thiết bị thực có cài đặt ứng dụng youtube. Nó vẫn mở trình duyệt web. Cách tiếp cận của Bibbity dưới đây hoạt động mặc dù. Hoặc có thể bình luận của Symmetric, đã không thử điều đó.
Mathias Conradt

33

Đây là cách tôi giải quyết vấn đề này:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + video_id));
startActivity(intent);

Bây giờ tôi đã thực hiện thêm một số nghiên cứu, có vẻ như tôi chỉ cần 'vnd.youtube:VIDEO_ID' thay vì hai dấu gạch chéo sau dấu hai chấm (':' vs. ': //'):

http://it-ride.blogspot.com/2010/04/android-youtube-intent.html

Tôi đã thử hầu hết các đề xuất ở đây và chúng không thực sự hoạt động tốt với tất cả các phương pháp được cho là "trực tiếp" đưa ra các ngoại lệ. Tôi cho rằng, với phương pháp của tôi, nếu ứng dụng YouTube KHÔNG được cài đặt, HĐH có vị trí dự phòng mặc định của một thứ khác ngoài việc làm hỏng ứng dụng. Về mặt lý thuyết, ứng dụng chỉ xuất hiện trên các thiết bị có ứng dụng YouTube trên chúng, vì vậy đây không phải là vấn đề.


Xin chào, Có thể phát video youtube trong Ứng dụng thay vì phát trên Webview không?
Bọ cạp

@Scorpion Có API youtube, với khả năng như vậy.
Matthewek

1
Nó hoạt động rất tốt! Nhưng bạn đang thiếu một dấu ngoặc đơn bên phải trên dòng đầu tiên.
KostasC

18

Sử dụng mã của tôi .. Tôi có thể phát video youtube bằng mã này ... bạn chỉ cần cung cấp id video youtube trong biến "videoId" ....

String videoId = "Fee5vbFLYM4";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 

3
Điều này trực tiếp khởi động ứng dụng YouTube, bỏ qua menu chọn mà bạn có thể chọn giữa chrome và YouTube trên JellyBean.
r1k0

2
@ r1k0 Có .... Mã này sẽ trực tiếp khởi động ứng dụng Youtube mặc định để phát video youtube ở tất cả các loại trò chơi Android (không chỉ trong JellyBean).
Soubhab Pathak

1
Nếu bạn có nhiều ứng dụng trình phát youtube (ví dụ Firetube), nó vẫn sẽ khiến bạn chọn. Chỉ cần nói và làm cho nó rõ ràng.
jj_

11
Intent videoClient = new Intent(Intent.ACTION_VIEW);
videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
startActivityForResult(videoClient, 1234);

Trong trường hợp videoIdlà id video của video youtube mà đã được đóng. Mã này hoạt động tốt trên Motorola Mốc .

Nhưng về cơ bản, những gì chúng ta có thể làm là kiểm tra xem hoạt động nào được tải khi bạn khởi động ứng dụng Youtube và thay thế phù hợp cho góiName và className.


Tôi nhận được lỗi sau. ERROR/AndroidRuntime(1519): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.google.android.youtube/com.google.android.youtube.PlayerActivity}; have you declared this activity in your AndroidManifest.xml? Vui lòng giải quyết điều này.
Vinothkumar Arputharaj

Thiết bị của bạn là gì? Tên hoạt động này chỉ dành riêng cho Cột mốc Motorola, nhưng nếu bạn muốn xem tên hoạt động cho phích cắm hoạt động youtube trong thiết bị của mình ở chế độ gỡ lỗi USB và xem LogCat khi bạn nhấp vào Ứng dụng Youtube. Nó sẽ cung cấp cho bạn tên gói nhận dạng với tên hoạt động.
Sana

7

Ứng dụng Youtube (và ứng dụng Market) chỉ được sử dụng với các ROM đặc biệt do Google phát hành cho G1 và G2. Vì vậy, bạn không thể chạy chúng trong OpenSource-ROM, giống như cái được sử dụng trong Trình giả lập, thật không may. Vâng, có lẽ bạn có thể, nhưng không phải là một cách chính thức được hỗ trợ.


Bạn có biết cách không được hỗ trợ?
Isaac Waller

Xin lỗi, không. Chỉ không muốn loại trừ khả năng.
Lemmy

6

EDIT: Việc triển khai dưới đây đã chứng minh rằng có vấn đề trên ít nhất một số thiết bị HTC (chúng bị hỏng). Vì lý do đó, tôi không sử dụng setgroupname và gắn bó với menu chọn hành động. Tôi mạnh mẽ ngăn cản sử dụng thực hiện cũ của tôi.

Sau đây là cách thực hiện cũ:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(youtubelink));
if(Utility.isAppInstalled("com.google.android.youtube", getActivity())) {
    intent.setClassName("com.google.android.youtube", "com.google.android.youtube.WatchActivity");
}
startActivity(intent);

Trường hợp Tiện ích là lớp tiện ích cá nhân của riêng tôi với phương pháp sau:

public static boolean isAppInstalled(String uri, Context context) {
    PackageManager pm = context.getPackageManager();
    boolean installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        installed = false;
    }
    return installed;
}

Đầu tiên tôi kiểm tra xem youtube đã được cài đặt chưa, nếu nó được cài đặt, tôi nói với android gói nào tôi muốn mở ý định của mình.


Tiện ích là gì? Tôi không thấy nó là một nhập khẩu có sẵn.
IgorGanapolsky

+1 cho EDIT. Sử dụng một tên lớp rõ ràng là không đáng tin cậy.
Giulio Piancastelli

5

Tìm thấy rồi:

03-18 12:40:02.842: INFO/ActivityManager(68): Starting activity: Intent { action=android.intent.action.VIEW data=(URL TO A FLV FILE OF THE VIDEO) type=video/* comp={com.google.android.youtube/com.google.android.youtube.YouTubePlayer} (has extras) }

Tuyệt vời! Vì vậy, bạn đã tạo ra một máy thu phát sóng cho điều này?
Dan

4

Trả lời câu hỏi cũ, chỉ cần thông báo cho các bạn rằng gói đó đã thay đổi, đây là bản cập nhật

Intent videoClient = new Intent(Intent.ACTION_VIEW);
videoClient.setData("VALID YOUTUBE LINK WITH HTTP");
videoClient.setClassName("com.google.android.youtube", "com.google.android.youtube.WatchActivity");
startActivity(videoClient);

Điều này hoạt động rất tốt, nhưng khi bạn gọi Ý định bình thường với ACTION_VIEW với URL youtube hợp lệ, người dùng sẽ nhận được bộ chọn Hoạt động.


3

Cách an toàn nhất để chạy video trên một ứng dụng khác là trước tiên hãy cố gắng giải quyết gói, nói cách khác, kiểm tra xem ứng dụng đã được cài đặt trên thiết bị chưa. Vì vậy, nếu bạn muốn chạy một video trên youtube, bạn sẽ làm một cái gì đó như thế này:

public void playVideo(String key){

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:" + key));

    // Check if the youtube app exists on the device
    if (intent.resolveActivity(getPackageManager()) == null) {
        // If the youtube app doesn't exist, then use the browser
        intent = new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://www.youtube.com/watch?v=" + key));
    }

    startActivity(intent);
}


2
/**
 * Intent to open a YouTube Video
 * 
 * @param pm
 *            The {@link PackageManager}.
 * @param url
 *            The URL or YouTube video ID.
 * @return the intent to open the YouTube app or Web Browser to play the video
 */
public static Intent newYouTubeIntent(PackageManager pm, String url) {
    Intent intent;
    if (url.length() == 11) {
        // youtube video id
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + url));
    } else {
        // url to video
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    }
    try {
        if (pm.getPackageInfo("com.google.android.youtube", 0) != null) {
            intent.setPackage("com.google.android.youtube");
        }
    } catch (NameNotFoundException e) {
    }
    return intent;
}

1

Bạn cũng có thể lấy WebViewClient

wvClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
  if (url.startsWith("youtube:")) {
    String youtubeUrl = "http://www.youtube.com/watch?v="
    + url.Replace("youtube:", "");
  startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(youtubeUrl)));
}
return false;
}

Làm việc tốt trong ứng dụng của tôi.


Hãy nhớ rằng alwasy - Google không bao giờ cho phép phát video youtube trong Webview. Bởi vì họ cung cấp API Youtube để phát video Youtube trên Ứng dụng Android. Nếu bạn sẽ phát video Youtube bên trong webview, thì Google sẽ xóa ứng dụng của bạn khỏi Playstore.
santosh devnath

1

Thử cái này:

public class abc extends Activity implements OnPreparedListener{

  /** Called when the activity is first created. */

  @Override
    public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));          


    @Override
      public void onPrepared(MediaPlayer mp) {
        // TODO Auto-generated method stub

    }
  }
}

0

Điều này sẽ hoạt động nếu cài đặt ứng dụng youtube. Nếu không, trình chọn sẽ hiển thị để chọn ứng dụng khác:

Uri uri = Uri.parse( "https://www.youtube.com/watch?v=bESGLojNYSo" );
uri = Uri.parse( "vnd.youtube:" + uri.getQueryParameter( "v" ) );
startActivity( new Intent( Intent.ACTION_VIEW, uri ) );

0

Thử cái này,

WebView webview = new WebView(this); 

String htmlString = 
    "<html> <body> <embed src=\"youtube link\"; type=application/x-shockwave-flash width="+widthOfDevice+" height="+heightOfDevice+"> </embed> </body> </html>";

webview.loadData(htmlString ,"text/html", "UTF-8");

Điều này cũng không làm việc cho tôi. Có bất kỳ yêu cầu của flash player trong trình giả lập.
iCoder

0

Hàm này hoạt động tốt đối với tôi ... chỉ cần truyền chuỗi url trong hàm:

void watch_video(String url)
{
    Intent yt_play = new Intent(Intent.ACTION_VIEW, Uri.parse(url))
    Intent chooser = Intent.createChooser(yt_play , "Open With");

    if (yt_play .resolveActivity(getPackageManager()) != null) {
                    startActivity(chooser);
                }
}

0

Bạn có thể sử dụng API trình phát Youtube Android để phát video nếu ứng dụng Youtube được cài đặt, nếu không, chỉ cần nhắc người dùng chọn từ các trình duyệt web có sẵn.

if(YouTubeIntents.canResolvePlayVideoIntent(mContext)){
                    mContext.startActivity(YouTubeIntents.createPlayVideoIntent(mContext, mVideoId));
}else {
    Intent webIntent = new Intent(Intent.ACTION_VIEW, 
           Uri.parse("http://www.youtube.com/watch?v=" + mVideoId));

    mContext.startActivity(webIntent);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.