Я создал приложение, в котором вы можете скачать видео на YouTube для Android. Теперь я хочу, чтобы, если вы воспроизводите видео в собственном приложении YouTube, вы можете его загрузить. Чтобы сделать это, мне нужно знать намерение, которое запускает собственное приложение YouTube, чтобы играть в приложение YouTube.
Я мог бы сделать это легко, если бы у меня была программа YouTube на моем эмуляторе, поэтому мой первый вопрос:
1. Могу ли я загрузить приложение YouTube для своего эмулятора, или...
2. Какое намерение используется, когда пользователь выбирает видео для воспроизведения.
Приложение YouTube для Android Play Video Intent
Ответ 1
И как насчет этого:
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);
}
}
Ответ 2
Это будет работать на устройстве, но не на эмуляторе за ответ Lemmy.
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
Ответ 3
Вот как я решил эту проблему:
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, так что это должно быть проблемой.
Ответ 4
Используйте мой код. Я могу воспроизводить видео 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);
Ответ 5
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 и, соответственно, заменить имя_пакета и имя_класса.
Ответ 6
Приложение Youtube (и Market) должно использоваться только со специальными ПЗУ, которые Google выпустил для G1 и G2. К сожалению, вы не можете запускать их в OpenSource-ROM, например, тот, который используется в эмуляторе. Ну, может быть, вы можете, но не официально поддерживаться.
Ответ 7
РЕДАКТИРОВАТЬ: приведенная ниже реализация оказалась проблема по крайней мере на некоторых устройствах 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;
}
Сначала я проверяю, установлен ли youtube, если он установлен, я сообщаю android, в каком пакете я предпочитаю открывать свои намерения.
Ответ 8
Найдено:
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) }
Ответ 9
Отвечая на старый вопрос, просто чтобы сообщить вам, что этот пакет изменился, heres update
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, пользователь получает селектор активности в любом случае.
Ответ 10
Самый безопасный способ запуска видео в другом приложении - сначала попытаться разрешить пакет, другими словами, проверить, что приложение установлено на устройстве. Поэтому, если вы хотите запустить видео на 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);
}
Ответ 11
Теперь у Youtube есть плеер api, вы должны попробовать это.
Ответ 12
/**
* 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;
}
Ответ 13
Вы также можете просто захватить 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;
}
Хорошо работает в моем приложении.
Ответ 14
Попробуйте следующее:
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
}
}
}
Ответ 15
Попробуй это,
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");
Ответ 16
Это будет работать, если приложение 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 ) );
Ответ 17
Эта функция отлично работает для меня... просто передайте строку 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);
}
}
Ответ 18
Вы можете использовать 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);
}