Android YouTube 앱 비디오 의도 재생


148

Android 용 YouTube 동영상을 다운로드 할 수있는 앱을 만들었습니다. 이제 YouTube 기본 앱에서 비디오를 재생하면 다운로드 할 수 있도록하고 싶습니다. 이를 위해서는 YouTube 네이티브 앱에서 YouTube 앱을 재생하려는 의도를 알아야합니다.
에뮬레이터에 YouTube 프로그램이 있으면 쉽게
할 수 있습니다 . 첫 번째 질문은 다음과 같습니다. 1. 에뮬레이터 용 YouTube 앱을 다운로드 할 수 있습니까? 또는
2. 사용자가 비디오를 선택할 때 사용되는 의도는 무엇입니까? 재생합니다.


야, 나는 또한 유튜브 비디오 다운로더 앱을 만들려고 노력하고 있습니다. 그래서, 나는 그것에 대한 API 키를 가져와야한다는 것을 알고 싶습니다. 또는 단순히 내 응용 프로그램에서 webview를 사용할 수 있습니까 ?? @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 앱을 지원하고 필요한 경우 웹 브라우저로 돌아 가기위한 소품. 이 질문에 오는 사람들에게는 이것이 사용하는 대답입니다.
Luke Sapan

키워드를 통한 검색을 위해 YouTube 앱을 시작하는 방법 (예 : YouTube 앱을 시작한 다음 검색에서 "steve jobs"를 검색하십시오
Rusheel Jain

@RusheelJain 새로운 문제가 될 것입니다. 내가하는 것은 "android youtube 의도 검색 텍스트"또는 이와 유사한 것을 검색하는 것입니다.
voghDev

2
IMHO이 답변이 받아 들여 져야합니다. 고마워요!
Nacho L.

1
이것이 답이지만 함수 선언에서 static을 제거해야합니다.
Ampersanda

176

이에 작동 장치 가 아니라 에뮬레이터레미의 답변을 .

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

YouTube 앱이 설치되어 있다면 대신 사용할 것인지 묻습니다.
Tristan Warner-Smith

이 코드를 사용하여 YouTube 및 브라우저에 대한 의도 선택기를 얻습니다. 숨기는 방법? 난 그냥 유튜브 플레이어에 직접 연결해야합니다.
Praveen

@Praveen Chandrasekaran은 YouTube 앱을 사용하지 못할 수 있습니다. Intent를 사용하는 것이 가장 좋으며, 설치된 앱 중 어떤 앱이 요청을 지원하는지 알아 내십시오.
cofiem

3
startActivity를 호출하기 전에 다음과 같이 intent에서 setClassName을 호출해야합니다. intent.videoClient.setClassName ( "com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); 작동 코드 예제는 Sana의 답변을 참조하십시오.
대칭

youtube 앱이 설치된 실제 기기에서는 작동하지 않습니다. 여전히 웹 브라우저가 열립니다. Bibbity의 접근 방식은 아래에서 작동합니다. 또는 대칭의 의견은 시도하지 않았습니다.
Mathias Conradt

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 앱이 설치되어 있지 않으면 OS에 앱 충돌 이외의 기본 폴백 위치가 있다고 가정합니다. 이 앱은 이론적으로 YouTube 앱이 설치된 기기에서만 작동하므로 문제가되지 않아야합니다.


안녕하세요, Webview에서 동영상을 재생하는 대신 YouTube 동영상을 앱에서 재생할 수 있습니까?
Scorpion

@Scorpion 그러한 가능성이있는 youtube API가 있습니다.
Matthewek

1
잘 작동합니다! 그러나 첫 줄에 오른쪽 괄호가 하나 없습니다.
KostasC

18

내 코드 사용 ..이 코드를 사용하여 YouTube 비디오를 재생할 수 있습니다 ... "videoId"변수에 YouTube 비디오 ID를 제공하면됩니다.

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

3
JellyBean에서 크롬과 YouTube를 선택할 수있는 선택기 메뉴를 무시하고 YouTube 애플리케이션을 직접 시작합니다.
r1k0

2
@ r1k0 예 ....이 코드는 기본 유튜브 앱을 직접 시작하여 모든 유형의 안드로이드 oses (JellyBean뿐만 아니라)에서 youtube 비디오를 재생합니다.
Soubhab Pathak

1
YouTube 플레이어 앱 (예 : 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 비디오의 비디오 ID는 어디에 있습니까 ? 이 코드는 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에만 해당되지만 USB 디버깅 모드에서 장치의 youtube 활동 플러그에 대한 활동 이름을보고 Youtube 앱을 클릭하면 LogCat이 표시됩니다. 액티비티 이름으로 로그온 한 패키지 이름을 제공해야합니다.
Sana

7

유튜브 (및 마켓 애플리케이션)는 Google이 G1 및 G2 용으로 출시 한 특수 ROM과 함께 사용해야합니다. 따라서 불행히도 에뮬레이터에서 사용되는 것과 같은 OpenSource-ROM에서 실행할 수 없습니다. 글쎄, 아마도 당신은 할 수 있지만 공식적으로 지원되지는 않습니다.


지원되지 않는 방법을 알고 있습니까?
Isaac Waller

죄송합니다 가능성을 배제하고 싶지 않았습니다.
Lemmy

6

편집 : 아래 구현은 적어도 일부 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에 어떤 패키지를 사용하여 내 의도를 열고 싶습니다.


유틸리티 란? 사용 가능한 가져 오기로 표시되지 않습니다.
IgorGanapolsky

편집 +1 명시 적 클래스 이름을 사용하는 것은 확실히 신뢰할 수 없습니다.
Giulio Piancastelli 2018 년

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

이것은 잘 작동하지만 유효한 YouTube URL을 사용하여 ACTION_VIEW로 일반 의도를 호출하면 사용자는 활동 선택기를 얻습니다.


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

내 앱에서 잘 작동했습니다.


alwasy-Google은 웹뷰에서 YouTube 동영상을 재생할 수 없습니다. Android 앱에서 Youtube 비디오를 재생하기 위해 Youtube API를 제공하기 때문입니다. 웹뷰 내에서 Youtube 비디오를 재생하면 Google이 Playstore에서 애플리케이션을 제거합니다.
santosh devnath 10

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

Youtube 앱이 설치되어있는 경우 Youtube Android 플레이어 API를 사용하여 비디오를 재생할 수 있습니다. 그렇지 않으면 사용 가능한 웹 브라우저에서 선택하라는 메시지가 표시됩니다.

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);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.