Android YouTube приложение Play Video Intent - PullRequest
135 голосов
/ 22 февраля 2009

Я создал приложение, где вы можете скачать видео с YouTube для Android. Теперь я хочу, чтобы, если вы воспроизводите видео в нативном приложении YouTube, вы также можете его скачать. Для этого мне нужно знать намерение, которое выдает собственное приложение YouTube, чтобы воспроизвести приложение YouTube.
Я мог бы сделать это легко, если бы у меня на эмуляторе была программа YouTube, поэтому мой первый вопрос:
1. Могу ли я загрузить приложение YouTube для моего эмулятора или ...
2. Какое намерение используется, когда пользователь выбирает видео для воспроизведения.

Ответы [ 18 ]

242 голосов
/ 15 сентября 2012

А как на счет этого:

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);
    }
} 
168 голосов
/ 21 августа 2009

Это будет работать на устройстве , но не эмуляторе за Ответ Лемми .

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
32 голосов
/ 19 августа 2011

Вот как я решил эту проблему:

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

Теперь, когда я провел еще какое-то исследование, похоже, мне нужно было только vnd.youtube:VIDEO_ID 'вместо двух косых черт после двоеточия (': 'vs.': // '):

http://it -ride.blogspot.com / 2010/04 / андроида-YouTube-intent.html

Я попробовал большинство предложений здесь, и они не очень хорошо работали со всеми предполагаемыми «прямыми» методами, вызывающими исключения. Я бы предположил, что с моим методом, если приложение YouTube НЕ установлено, ОС по умолчанию имеет запасную позицию, отличную от сбоя приложения. В любом случае приложение теоретически работает только на устройствах с приложением YouTube, так что это не проблема.

18 голосов
/ 07 сентября 2011

Используйте мой код ... Я могу воспроизводить видео YouTube с помощью этого кода ... вам просто нужно указать идентификатор видео YouTube в переменной "videoId" ....

String videoId = "Fee5vbFLYM4";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 
10 голосов
/ 15 ноября 2010
Intent videoClient = new Intent(Intent.ACTION_VIEW);
videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
startActivityForResult(videoClient, 1234);

Где videoId - это идентификатор видео с YouTube, которое необходимо воспроизвести. Этот код отлично работает на Motorola Milestone .

Но в основном мы можем проверять, какая активность загружается при запуске приложения Youtube, и соответственно заменять packageName и className.

7 голосов
/ 01 марта 2009

Youtube (и приложение Market) должны использоваться только со специальными ПЗУ, которые Google выпустила для G1 и G2. Таким образом, вы не можете запускать их в OpenSource-ROM, например, используемом в эмуляторе, к сожалению. Ну, может быть, вы можете, но не официально поддерживаемым способом.

6 голосов
/ 21 февраля 2012

РЕДАКТИРОВАТЬ: приведенная ниже реализация оказалась проблема по крайней мере на некоторых устройствах HTC (они потерпели крах). По этой причине я не использую setclassname и придерживаюсь меню выбора действий. Я настоятельно не рекомендую использовать мою старую реализацию.

Ниже приводится старая реализация:

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);

Где Утилита - это мой личный служебный класс со следующим методом:

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;
}

Сначала я проверяю, установлен ли youtube, если он установлен, я сообщаю android, какой пакет я предпочитаю открывать.

5 голосов
/ 18 марта 2009

Нашли:

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) }
4 голосов
/ 21 июля 2011

Отвечая на старый вопрос, просто чтобы сообщить вам, ребята, что пакет изменился, вот обновление

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);

Это работает очень хорошо, но когда вы вызываете обычный Intent с ACTION_VIEW с действующим URL-адресом YouTube, пользователь все равно получает селектор Activity.

3 голосов
/ 17 февраля 2017

Самый безопасный способ запуска видео в другом приложении - сначала попытаться разрешить пакет, другими словами, проверить, установлено ли приложение на устройстве. Поэтому, если вы хотите запустить видео на YouTube, вы должны сделать что-то вроде этого:

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);
}
...