it-swarm.com.de

Android YouTube-App Play Video Intent

Ich habe eine App erstellt, mit der Sie YouTube-Videos für Android herunterladen können. Nun, ich möchte es so haben, dass Sie es auch herunterladen können, wenn Sie ein Video in der nativen YouTube-App abspielen. Dazu muss ich die Absicht kennen, die die native YouTube-App ausgibt, um die YouTube-App abzuspielen.
Ich könnte dies leicht tun, wenn ich das YouTube-Programm auf meinem Emulator hätte. Daher lautet meine erste Frage:
1. Kann ich die YouTube-App für meinen Emulator herunterladen oder ...
2. Welche Absicht wird verwendet, wenn der Benutzer ein Video für die Wiedergabe auswählt?.

132
Isaac Waller

Und wie wäre es damit:

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

Dies funktioniert auf einem Gerät, aber nicht dem Emulator pro Lemmys Antwort .

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

So habe ich dieses Problem gelöst:

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

Nun, da ich noch etwas recherchiert habe, scheint es, als hätte ich nur 'vnd.youtube:VIDEO_ID' anstelle von zwei Schrägstrichen nach dem Doppelpunkt (':' vs. ': //') benötigt:

http://it-ride.blogspot.com/2010/04/Android-youtube-intent.html

Ich habe die meisten Vorschläge hier ausprobiert und sie funktionierten nicht wirklich gut mit allen angeblichen "direkten" Methoden, die zu Ausnahmen führten. Ich würde davon ausgehen, dass das Betriebssystem bei meiner Methode, wenn die YouTube-App NICHT installiert ist, eine Standard-Fallback-Position hat, die nicht zum Absturz der App führt. Die App läuft theoretisch ohnehin nur auf Geräten, auf denen die YouTube-App installiert ist, daher sollte dies kein Problem sein.

31

Verwenden Sie meinen Code .. Ich kann mit diesem Code Youtube-Video abspielen ... Sie müssen lediglich die Youtube-Video-ID in der "videoId" -Variable angeben.

String videoId = "Fee5vbFLYM4";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 
18
Soubhab Pathak
    Intent videoClient = new Intent(Intent.ACTION_VIEW);
    videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
    startActivityForResult(videoClient, 1234);

dabei ist videoId die Video-ID des Youtube-Videos, das abgespielt werden muss. Dieser Code funktioniert gut bei Motorola Milestone.

Im Grunde können wir jedoch prüfen, welche Aktivität beim Start der Youtube-App geladen wird, und den Paketnamen und den Klassennamen entsprechend ersetzen.

10
Sana

Youtube (und die Market-Anwendung) dürfen nur mit speziellen ROMs verwendet werden, die Google für G1 und G2 veröffentlicht hat. Sie können sie daher nicht in einem OpenSource-ROM ausführen, wie es leider im Emulator verwendet wird. Vielleicht können Sie das, aber nicht auf offiziell unterstützte Weise.

7
Lemmy

Fand es: 

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) }
5
Isaac Waller

BEARBEITEN: Die unten beschriebene Implementierung hatte zumindest bei einigen HTC-Geräten Probleme (sie stürzten ab). Aus diesem Grund verwende ich setclassname nicht und bleibe beim Aktionsauswahlmenü. Ich rate dringend davon ab, meine alte Implementierung zu verwenden.

Nachfolgend die alte Implementierung:

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

Wo Utility ist meine persönliche Utility-Klasse mit folgender Methode:

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

Zuerst überprüfe ich, ob youtube installiert ist. Wenn es installiert ist, sage ich Android, welches Paket ich meine Absicht vorziehen möchte.

5
Warpzit

Antworten auf die alte Frage, nur um Sie zu informieren, dass sich das Paket geändert hat, hier das 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);

Das funktioniert sehr gut, aber wenn Sie normale Absichten mit ACTION_VIEW mit gültiger Youtube-URL aufrufen, erhält der Benutzer die Aktivitätsauswahl trotzdem.

4
Shardul

Der sicherste Weg, Videos in einer anderen App auszuführen, besteht darin, zunächst das Paket aufzulösen, dh zu überprüfen, ob die App auf dem Gerät installiert ist. Wenn Sie also ein Video auf youtube abspielen möchten, würden Sie Folgendes tun: 

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);
}
3
Ahmad
/**
 * 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;
}
2
Jared Rummler

Youtube hat jetzt eine Spieler-API, das solltest du versuchen.

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

2
StarWars

Versuche dies:

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

    }
  }
}
1
premsagar

Sie können auch einfach die WebViewClient greifen 

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

Funktionierte gut in meiner App.

1
Auri Rahimzadeh

Dies funktioniert, wenn die YouTube-App installiert ist. Ist dies nicht der Fall, erscheint eine Auswahl, um eine andere Anwendung auszuwählen:

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
RonTLV

Versuche dies,

       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");
0
Raju Jadhav

Sie können die Youtube-Android-Player-API verwenden, um das Video abzuspielen, wenn die Youtube-App installiert ist. Andernfalls fordern Sie den Benutzer einfach auf, aus den verfügbaren Webbrowsern auszuwählen.

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

Diese Funktion funktioniert gut für mich ... einfach URL-String in Funktion übergeben:

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
Manthan Patel