IT story

Android YouTube 앱 비디오 의도 재생

hot-time 2020. 6. 20. 09:36
반응형

Android YouTube 앱 비디오 의도 재생


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


이건 어때?

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

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

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

이 문제를 해결 한 방법은 다음과 같습니다.

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 앱이 설치된 기기에서만 작동하므로 문제가되지 않아야합니다.


내 코드 사용 ..이 코드를 사용하여 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); 

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을 대체하는 것입니다.


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


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


그것을 발견:

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

오래된 질문에 답하여 패키지가 변경되었음을 알려 드리기 위해 여기에 업데이트가 있습니다.

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로 일반 의도를 호출하면 사용자는 활동 선택기를 얻습니다.


다른 앱에서 동영상을 실행하는 가장 안전한 방법은 먼저 패키지를 해결하려고 시도하는 것입니다. 즉, 앱이 기기에 설치되어 있는지 확인합니다. 따라서 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);
}

유튜브에는 이제 플레이어 API가 있습니다.

https://developers.google.com/youtube/android/player/


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

당신은 또한 그냥 잡아 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;
}

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


이 시도:

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

    }
  }
}

This will work if youtube app installed. If not, a chooser will show up to select other application:

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

Try this,

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

This function work fine for me...just pass url string in function:

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

You can use the Youtube Android player API to play the video if Youtube app is installed, otherwise just prompt the user to choose from the available web browsers.

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

참고URL : https://stackoverflow.com/questions/574195/android-youtube-app-play-video-intent

반응형