Aplikasi Android YouTube Mainkan Video Intent

148

Saya telah membuat aplikasi untuk mengunduh video YouTube untuk android. Sekarang, saya menginginkannya sehingga jika Anda memutar video di aplikasi asli YouTube Anda juga dapat mengunduhnya. Untuk melakukan ini, saya perlu tahu Intent yang dikeluarkan aplikasi asli YouTube untuk memainkan aplikasi YouTube.
Saya dapat melakukan ini dengan mudah jika saya memiliki program YouTube di emulator saya, jadi pertanyaan pertama saya adalah:
1. Dapatkah saya mengunduh aplikasi YouTube untuk emulator saya, atau ...
2. Apa maksudnya digunakan ketika pengguna memilih video untuk pemutaran.

Isaac Waller
sumber
hei, saya juga mencoba membuat aplikasi pengunduh video youtube. Jadi, saya ingin tahu bahwa saya harus mendapatkan kunci api untuk itu atau hanya saya dapat menggunakan tampilan web di aplikasi saya ?? @ASP
Jaydip Kalkani

Jawaban:

263

Dan bagaimana dengan ini:

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

Catatan: Berhati-hatilah saat Anda menggunakan metode ini, YouTube dapat menangguhkan saluran Anda karena spam, ini terjadi dua kali dengan saya

Roger Garzon Nieto
sumber
5
Alat peraga untuk mendukung aplikasi YouTube jika tersedia, dan kembali ke peramban web jika perlu. Bagi mereka yang datang ke pertanyaan ini, ini adalah jawaban untuk digunakan.
Luke Sapan
Bagaimana cara meluncurkan aplikasi youtube untuk pencarian melalui kata kunci misalnya. saya ingin aplikasi youtube diluncurkan dan kemudian dalam pencarian untuk "steve jobs"
Rusheel Jain
@RusheelJain itu akan menjadi masalah baru. Apa yang akan saya lakukan adalah mencari "teks pencarian maksud youtube android" atau sesuatu seperti itu.
voghDev
2
IMHO ini harus menjadi jawaban yang diterima. Terima kasih banyak!
Nacho L.
1
Ini adalah jawabannya tetapi mungkin Anda harus menghapus statis dalam deklarasi fungsi
Ampersanda
176

Ini akan bekerja pada perangkat tetapi bukan emulator per jawaban Lemmy .

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
emmby
sumber
Ini adalah pemenang bagi saya, jika Anda menginstal aplikasi youtube, ia menanyakan apakah Anda ingin menggunakannya.
Tristan Warner-Smith
gunakan kode ini saya mendapatkan pemilih pilihan untuk youtube dan browser. bagaimana cara menyembunyikannya? saya hanya perlu menghubungkan langsung ke pemutar youtube.
Praveen
@Praveen Chandrasekaran aplikasi youtube mungkin tidak tersedia - yang terbaik adalah menggunakan Intent, dan biarkan sistem bekerja di mana aplikasi yang diinstal mendukung permintaan tersebut.
cofiem
3
Anda harus memanggil setClassName di Intent sebelum memanggil startActivity, seperti ini: intent.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); Lihat jawaban Sana untuk contoh kode kerja.
Simetris
Ini tidak berfungsi untuk saya, pada perangkat nyata dengan aplikasi youtube diinstal. Itu masih membuka browser web. Pendekatan oleh Bibbity di bawah ini berhasil. Atau mungkin komentar Symmetric, belum mencobanya.
Mathias Conradt
33

Inilah cara saya mengatasi masalah ini:

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

Sekarang saya telah melakukan penelitian lebih lanjut, sepertinya saya hanya perlu 'vnd.youtube:VIDEO_ID' alih-alih dua garis miring setelah titik dua (':' vs. ': //'):

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

Saya mencoba sebagian besar saran di sini dan mereka tidak benar-benar bekerja dengan baik dengan semua metode "langsung" yang seharusnya meningkatkan pengecualian. Saya akan berasumsi bahwa, dengan metode saya, jika aplikasi YouTube TIDAK diinstal, OS memiliki posisi mundur default untuk sesuatu selain menabrakkan aplikasi. Aplikasi ini secara teoritis hanya terjadi pada perangkat dengan aplikasi YouTube pada mereka, jadi ini seharusnya bukan masalah.

Bibbity Bobbity Boo
sumber
Halo, Apakah mungkin untuk memutar video youtube di App alih-alih diputar di Webview?
Scorpion
@ Scorpion Ada youtube API, dengan kemungkinan seperti itu.
Matthewek
1
Ini sangat bagus! Tetapi Anda tidak memiliki tanda kurung yang benar pada baris pertama.
KostasC
18

Gunakan kode saya .. Saya dapat memutar video youtube menggunakan kode ini ... Anda hanya perlu memberikan id video youtube dalam variabel "videoId" ....

String videoId = "Fee5vbFLYM4";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 
Soubhab Pathak
sumber
3
Ini secara langsung memulai aplikasi YouTube, melewati menu pemilih di mana Anda dapat memilih antara chrome dan YouTube di JellyBean.
r1k0
2
@ r1k0 Ya .... Kode ini akan langsung memulai aplikasi Youtube default untuk memutar video youtube di semua jenis penggunaan Android (tidak hanya di JellyBean).
Soubhab Pathak
1
Jika Anda memiliki lebih dari satu aplikasi pemutar YouTube (contoh Firetube), itu masih akan membuat Anda memilih. Hanya mengatakan dan membuatnya jelas.
jj_
11
Intent videoClient = new Intent(Intent.ACTION_VIEW);
videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
startActivityForResult(videoClient, 1234);

Di mana videoIdid video dari video youtube yang harus diputar. Kode ini berfungsi dengan baik di Motorola Milestone .

Tetapi pada dasarnya apa yang bisa kita lakukan adalah memeriksa aktivitas apa yang dimuat saat Anda memulai aplikasi Youtube dan dengan demikian mengganti nama paket dan nama kelas.

Sana
sumber
Saya mendapatkan kesalahan berikut. 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? Silakan atasi ini.
Vinothkumar Arputharaj
Apa perangkatmu? Nama aktivitas ini hanya khusus untuk Milestone Motorola, tetapi jika Anda ingin melihat nama aktivitas untuk plug aktivitas youtube di perangkat Anda dalam mode debugging USB dan lihat LogCat ketika Anda mengklik pada Aplikasi Youtube. Seharusnya memberi Anda nama paket yang sama dengan nama aktivitas.
Sana
7

Youtube (dan aplikasi Market) seharusnya hanya digunakan dengan ROM khusus, yang dirilis Google untuk G1 dan G2. Jadi Anda tidak dapat menjalankannya dalam OpenSource-ROM, seperti yang digunakan di Emulator, sayangnya. Yah, mungkin Anda bisa, tetapi tidak dengan cara yang didukung secara resmi.

Lemmy
sumber
Apakah Anda tahu cara yang tidak didukung?
Isaac Waller
Maaf tidak. Hanya tidak ingin mengesampingkan kemungkinan itu.
Lemmy
6

EDIT: Implementasi di bawah ini terbukti memiliki masalah pada setidaknya beberapa perangkat HTC (mereka crash). Untuk alasan itu saya tidak menggunakan setclassname dan tetap dengan menu pemilih tindakan. Saya sangat tidak suka menggunakan implementasi lama saya.

Berikut ini adalah implementasi lama:

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

Di mana Utility adalah kelas utilitas pribadi saya sendiri dengan metode berikut:

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

Pertama saya memeriksa apakah youtube diinstal, jika diinstal, saya memberi tahu android paket mana yang saya pilih untuk membuka maksud saya.

Warpzit
sumber
Apa itu Utilitas? Saya tidak melihatnya sebagai impor yang tersedia.
IgorGanapolsky
+1 untuk EDIT. Menggunakan nama kelas eksplisit jelas tidak bisa diandalkan.
Giulio Piancastelli
5

Menemukannya:

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) }
Isaac Waller
sumber
Luar biasa! Jadi, apakah Anda baru saja membuat penerima siaran untuk ini?
Dan
4

Membalas pertanyaan lama, hanya untuk memberi tahu kalian bahwa paket telah berubah, inilah pembaruannya

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

Ini berfungsi dengan baik, tetapi saat Anda memanggil Intent normal dengan ACTION_VIEW dengan pengguna URL youtube yang valid, pilih Pemilih aktivitas.

Shardul
sumber
3

Cara paling aman untuk menjalankan video pada aplikasi yang berbeda adalah dengan terlebih dahulu mencoba menyelesaikan paket, dengan kata lain, periksa apakah aplikasi tersebut diinstal pada perangkat. Jadi jika Anda ingin menjalankan video di youtube Anda akan melakukan sesuatu seperti ini:

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);
}
Ahmad
sumber
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;
}
Jared Rummler
sumber
1

Anda juga bisa langsung ambil 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;
}

Bekerja dengan baik di aplikasi saya.

Auri Rahimzadeh
sumber
Ingatlah selalu - Google tidak pernah mengizinkan memutar video youtube di dalam Webview. Karena mereka menyediakan Youtube API untuk memutar video Youtube di Aplikasi Android. Jika Anda akan memutar video Youtube di dalam tampilan web, maka Google akan menghapus aplikasi Anda dari Playstore.
santosh devnath
1

Coba ini:

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

    }
  }
}
premsagar
sumber
0

Ini akan berfungsi jika aplikasi youtube diinstal. Jika tidak, pemilih akan muncul untuk memilih aplikasi lain:

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 ) );
RonTLV
sumber
0

Coba ini,

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");
Raju Jadhav
sumber
Ini juga tidak berhasil untuk saya. Apakah ada persyaratan flash player di emulator.
The iCoder
0

Fungsi ini berfungsi dengan baik untuk saya ... cukup berikan string url dalam fungsi:

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);
                }
}
Manthan Patel
sumber
0

Anda dapat menggunakan Youtube Android player API untuk memutar video jika aplikasi Youtube diinstal, jika tidak, hanya meminta pengguna untuk memilih dari browser web yang tersedia.

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