J'ai créé une application sur laquelle vous pouvez télécharger des vidéos YouTube pour Android. Maintenant, je le veux pour que vous puissiez aussi le télécharger si vous lisez une vidéo dans l'application native YouTube. Pour ce faire, je dois connaître l'intention de l'application native YouTube afin de pouvoir lire l'application YouTube.
Je pourrais le faire facilement si j'avais le programme YouTube sur mon émulateur, alors ma première question est la suivante:
1. Puis-je télécharger l'application YouTube pour mon émulateur ou ...
2. Quelle est l'intention utilisée lorsque l'utilisateur sélectionne une vidéo pour la lecture.
Et que diriez-vous de ceci:
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);
}
}
Cela fonctionnera sur un périphérique mais pas l'émulateur pour La réponse de Lemmy .
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
Voici comment j'ai résolu ce problème:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + video_id));
startActivity(intent);
Maintenant que j'ai fait d'autres recherches, il semble que je n'ai eu besoin que de 'vnd.youtube: VIDEO_ID' au lieu de deux barres obliques après le deux points (':' vs. ': //'):
http://it-ride.blogspot.com/2010/04/Android-youtube-intent.html
J'ai essayé la plupart des suggestions ici et elles ne fonctionnaient pas très bien avec toutes les méthodes supposées "directes" qui soulèvent des exceptions. Je suppose que, avec ma méthode, si l'application YouTube n'est PAS installée, le système d'exploitation a une position de repli par défaut autre que le blocage de l'application. En théorie, l'application ne fonctionne de toute façon que sur les appareils dotés de l'application YouTube. Cela ne devrait donc pas poser de problème.
Utiliser mon code .. Je suis capable de lire une vidéo youtube en utilisant ce code ... il vous suffit de fournir un identifiant de vidéo youtube dans la variable "videoId" ....
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);
où videoId est l'identifiant vidéo de la vidéo youtube à lire. Ce code fonctionne bien sur Motorola Milestone.
Mais fondamentalement, ce que nous pouvons faire est de vérifier quelle activité est chargée lorsque vous démarrez l’application Youtube et de remplacer en conséquence le packageName et le className.
Youtube (et l'application Market) ne sont censés être utilisés qu'avec des ROM spéciales, que Google a publiées pour le G1 et le G2. Donc, vous ne pouvez pas les exécuter dans une OpenSource-ROM, comme celle utilisée dans Emulator, malheureusement. Eh bien, peut-être que vous pouvez, mais pas de manière officielle.
Trouvé le:
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) }
EDIT: L'implémentation ci-dessous s'est avérée avoir des problèmes sur au moins certains appareils HTC (ils se sont écrasés). Pour cette raison, je n'utilise pas setclassname et je m'en tiens au menu du sélecteur d'action. Je déconseille fortement d'utiliser mon ancienne implémentation.
Voici l'ancienne mise en oeuvre:
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);
Où Utility est ma propre classe d’utilité personnelle avec la méthode suivante:
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;
}
Je vérifie d’abord si youtube est installé, puis, le cas échéant, je dis à Android quel paquet je préfère ouvrir.
Répondant à une vieille question, juste pour vous informer que le paquet a changé, voici la mise à jour
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);
Cela fonctionne très bien, mais quand vous appelez Intent avec ACTION_VIEW avec un utilisateur valide d'URL youtube, le sélecteur d'activité est de toute façon.
Le moyen le plus sûr d’exécuter des vidéos sur une application différente est d’abord de tenter de résoudre le package, c’est-à-dire de vérifier que l’application est installée sur le périphérique. Donc, si vous voulez diffuser une vidéo sur youtube, vous feriez quelque chose comme ceci:
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);
}
/**
* 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;
}
Youtube a maintenant une api de joueur, vous devriez essayer ça.
Essaye ça:
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
}
}
}
Vous pouvez aussi simplement saisir la 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;
}
A bien fonctionné dans mon application.
Cela fonctionnera si l'application youtube est installée. Sinon, un sélecteur apparaîtra pour sélectionner une autre 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 ) );
Essaye ça,
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");
Vous pouvez utiliser l'API du lecteur Android Youtube de Youtube pour lire la vidéo si l'application Youtube est installée, sinon, invitez simplement l'utilisateur à choisir parmi les navigateurs Web disponibles.
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);
}
Cette fonction marche bien pour moi ... il suffit de passer la chaîne d'URL dans la fonction:
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);
}
}