Додаток Android YouTube Play Video Name


148

Я створив додаток, куди можна завантажувати відео з YouTube на андроїд. Тепер я хочу, щоб, якщо ви відтворюєте відео в рідному додатку YouTube, можете також завантажити його. Для цього мені потрібно знати ті наміри, які видає рідний додаток YouTube, щоб відтворити додаток YouTube.
Я міг би це зробити легко, якби на моєму емуляторі була програма YouTube, тому моє перше питання:
1. Чи можна завантажити додаток YouTube для свого емулятора, або ...
2. Який намір використовується, коли користувач вибирає відео для відтворення.


Ей, я також намагаюся зробити додаток для завантаження відео на YouTube. Отже, я хочу знати, що я повинен отримати будь-який ключ api для цього або просто я можу використовувати веб-перегляд у своєму додатку ?? @ASP
Jaydip Kalkani

Відповіді:


263

А як щодо цього:

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

Примітка. Остерігайтеся, коли ви використовуєте цей метод, YouTube може призупинити ваш канал через спам. Це сталося зі мною два рази


5
Реквізити для підтримки програми YouTube, якщо вона доступна, і повернення до веб-браузера, якщо це необхідно. Для тих, хто приходить до цього питання, це відповідь на використання.
Лука Сапан

Як запустити додаток YouTube для пошуку за ключовим словом, наприклад. я хочу, щоб запустити додаток youtube, а потім шукати "роботу Steve"
Rusheel Jain

@RusheelJain це буде новим випуском. Що я б робив, це пошук "тексту пошуку в намірах Android на YouTube" або чогось подібного.
voghDev

2
ІМХО це має бути прийнятою відповіддю. Дуже дякую!
Начо Л.

1
Це відповідь, але, можливо, вам слід усунути статику в декларації функції
Ampersanda

176

Це буде працювати на пристрої, але не емуляторі відповідно до відповіді Леммі .

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

Для мене це був переможець, якщо у вас встановлено додаток youtube, він запитує, чи хочете ви використовувати це замість цього.
Трістан Уорнер-Сміт

за допомогою цього коду я отримую вибір наміру для youtube та браузера. як це приховати? Мені просто потрібно прямо підключитися до програвача YouTube.
Правен

@Praveen Chandrasekaran додаток youtube може бути недоступним - найкраще скористатися Інтенцією та дозволити системі працювати, які встановлені програми підтримують запит.
cofiem

3
Вам потрібно буде викликати setClassName за наміром перед тим, як викликати startActivity, наприклад: intent.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); Дивіться відповідь Сани на прикладі робочого коду.
Симетричний

Це не працює для мене на реальному пристрої з встановленим додатком YouTube. Він все ще відкриває веб-браузер. Підхід Біббіті нижче працює, однак. Чи, можливо, коментар Symmetric цього не пробував.
Матіас Конрадт

33

Ось як я вирішив це питання:

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/android-youtube-intent.html

Я спробував більшість пропозицій тут, і вони насправді не дуже добре спрацювали з усіма передбачуваними "прямими" методами, що викликають винятки. Я б припустив, що з моїм методом, якщо додаток YouTube НЕ встановлено, ОС має за замовчуванням резервне положення чогось іншого, ніж збій програми. Додаток теоретично працює лише на пристроях, на яких додано YouTube, так що це не повинно бути проблемою.


Привіт, чи можна відтворювати відео на YouTube в додатку, а не відтворювати їх у веб-перегляді?
Скорпіон

@Scorpion Існує API YouTube, з такою можливістю.
Matthewek

1
Це чудово працює! Але вам не вистачає однієї правильної дужки в першому рядку.
KostasC

18

Використовуйте мій код .. Я можу відтворювати відео на 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); 

3
Це безпосередньо запускає додаток YouTube, минаючи меню вибору, в якому на JellyBean можна вибрати між хромом та YouTube.
r1k0

2
@ r1k0 Так .... Цей код безпосередньо запустить додаток Youtube за замовчуванням, щоб відтворити відео на YouTube у всіх типах андроїдних осей (не тільки в JellyBean).
Субхаб Патхак

1
Якщо у вас є кілька додатків програвача ютубей (наприклад, Firetube), ви все одно змусите вас вибрати. Просто сказати і дати зрозуміти.
jj_

11
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.


Я отримую таку помилку. 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? Прохання вирішити це.
Vinothkumar Arputharaj

Який ваш пристрій? Ця назва активності є специфічною лише для Motorola Milestone, але якщо ви хочете побачити ім'я активності для штекера активності youtube на вашому пристрої в режимі налагодження USB і побачити LogCat, натиснувши додаток Youtube. Він повинен дати вам ім'я пакета alogn з назвою діяльності.
Сана

7

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


Чи знаєте ви непідтримуваний спосіб?
Ісаак Валлер

Вибач, ні. Просто не хотілося, щоб виключити таку можливість.
Леммі

6

EDIT: Наведена нижче програма виявила проблеми принаймні на деяких пристроях 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);

Де Utility - це мій особистий клас корисних програм із наступним методом:

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

Спочатку я перевіряю, чи встановлено ютуб, якщо він встановлений, я скажу андроїд, який пакет я вважаю за краще відкрити свою мету.


Що таке утиліта? Я не вважаю це доступним імпортом.
ІгорГанапольський

+1 для редагування. Використання явного імені класу, безумовно, недостовірне.
Джуліо Піанкастеллі

5

Знайшов це:

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

Дивовижно! Ви просто створили для цього приймач широкомовної передачі?
Dan

4

Відповідаючи на старе запитання, просто щоб повідомити вам, хлопці, що пакет змінився, ось оновлення

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

Це працює дуже добре, але коли ви викликаєте звичайний Намір з ACTION_VIEW з дійсною URL-адресою YouTube, користувач все одно отримує перемикач активності.


3

Найбезпечніший спосіб запуску відео в іншому додатку - спершу спробу вирішити пакет, іншими словами перевірити, чи додаток встановлено на пристрої. Тож якщо ви хочете запустити відео на 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);
}


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

Ви також можете просто захопити 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;
}

Добре працював у моєму додатку.


Пам’ятайте, що завжди - Google ніколи не дозволяє відтворювати відео YouTube у веб-перегляді. Тому що вони надають API API для відтворення відео з Youtube на Android App. Якщо ви будете відтворювати відео Youtube у веб-перегляді, Google видалить вашу програму з Playstore.
santosh devnath

1

Спробуйте це:

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

Це буде працювати, якщо встановлено додаток youtube. Якщо ні, то для вибору іншої програми з’явиться вибір:

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

Спробуйте це,

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

Це також для мене не працює. Чи є в емуляторі флеш плеєр.
iCoder

0

Ця функція добре працює для мене ... просто передайте рядок URL у функції:

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

Ви можете використовувати API програвача Youtube для Android для відтворення відео, якщо встановлено додаток Youtube, інакше просто запропонуйте користувачеві вибрати один із доступних веб-браузерів.

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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.