แอพ Android YouTube เล่นวิดีโอแสดงเจตนา


148

ฉันได้สร้างแอพที่คุณสามารถดาวน์โหลดวิดีโอ YouTube สำหรับ Android ตอนนี้ฉันต้องการมันเพื่อที่ว่าถ้าคุณเล่นวิดีโอในแอปเนทีฟของ YouTube คุณสามารถดาวน์โหลดได้เช่นกัน ในการทำเช่นนี้ฉันจำเป็นต้องทราบเจตนาที่แอปเนทีฟของ YouTube ออกมาเพื่อที่จะเล่นแอพ YouTube
ฉันจะทำเช่นนี้ easially ถ้าผมมีโปรแกรม YouTube บนจำลองของฉันดังนั้นคำถามที่ 1 ของฉันคือ
1. ฉันสามารถดาวน์โหลดแอป YouTube สำหรับจำลองของเราหรือ ...
2. อะไรคือความตั้งใจที่จะใช้เมื่อผู้ใช้เลือกวิดีโอ สำหรับการเล่น


เฮ้ฉันกำลังพยายามสร้างแอปดาวน์โหลดวิดีโอ youtube ด้วย ดังนั้นฉันต้องการที่จะรู้ว่าฉันต้องได้รับคีย์ 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 ถ้ามีและกลับไปที่เว็บเบราว์เซอร์ในกรณีที่จำเป็น สำหรับผู้ที่มาถึงคำถามนี้นี่คือคำตอบที่จะใช้
ลุคซาพัน

วิธีเปิดแอป YouTube เพื่อค้นหาด้วยคำหลักเช่น ฉันต้องการแอป youtube ที่จะเปิดตัวและจากนั้นในการค้นหา "สตีฟ
จ็อบส์

@RusheelJain ที่จะเป็นปัญหาใหม่ สิ่งที่ฉันทำคือค้นหา "android youtube intent search text" หรืออะไรทำนองนั้น
voghDev

2
IMHO นี่ควรเป็นคำตอบที่ยอมรับได้ ขอบคุณมาก!
Nacho L.

1
นี่คือคำตอบ แต่บางทีคุณควรลบแบบคงที่ในการประกาศฟังก์ชัน
Ampersanda

176

นี้จะทำงานบนอุปกรณ์แต่ไม่เอาอย่างต่อคำตอบของเลม

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

นี่คือผู้ชนะสำหรับฉันถ้าคุณติดตั้งแอป youtube แล้วจะถามว่าคุณต้องการใช้แอปนี้หรือไม่
อุโมงค์วอร์เนอร์สมิ ธ

ใช้รหัสนี้ฉันได้รับตัวเลือกเจตนาสำหรับ youtube และเบราว์เซอร์ วิธีซ่อนมัน ฉันแค่ต้องเชื่อมโยงโดยตรงกับผู้เล่น youtube
Praveen

@Praveen Chandrasekaran แอป youtube อาจไม่สามารถใช้งานได้ - เป็นการดีที่สุดที่จะใช้ Intent และปล่อยให้ระบบทำงานได้ว่าแอปใดที่ติดตั้งไว้รองรับคำขอ
cofiem

3
คุณจะต้องเรียกใช้ setClassName บน Intent ก่อนที่จะเรียก startActivity เช่นนี้: intent.videoClient.setClassName ("com.google.android.youtube", "com.google.android.youtube.PlayerActivity"); ดูคำตอบของ Sana สำหรับตัวอย่างโค้ดที่ใช้งานได้
สมมาตร

สิ่งนี้ไม่ได้ผลสำหรับฉันบนอุปกรณ์จริงที่ติดตั้งแอป youtube มันยังคงเปิดเว็บเบราว์เซอร์ วิธีการโดย Bibbity ด้านล่างใช้งานได้แม้ว่า หรืออาจจะเป็นความคิดเห็นของ Symmetric ยังไม่ได้ลอง
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 ระบบปฏิบัติการจะมีตำแหน่งทางเลือกเริ่มต้นของสิ่งอื่นนอกเหนือจากการหยุดทำงานแอป แอปนี้ใช้งานได้กับอุปกรณ์ที่มีแอพ YouTube ในทางทฤษฎีเท่านั้นดังนั้นนี่จึงไม่ใช่ปัญหา


สวัสดีเป็นไปได้ไหมที่จะเล่นวิดีโอ youtube ในแอพแทนที่จะเล่นใน Webview?
แมงป่อง

@Scorpion มี youtube API พร้อมความเป็นไปได้ดังกล่าว
Matthewek

1
มันใช้งานได้ดี! แต่คุณไม่พบวงเล็บขวาหนึ่งอันในบรรทัดแรก
KostasC

18

ใช้รหัสของฉัน .. ฉันสามารถเล่นวิดีโอ YouTube ได้โดยใช้รหัสนี้ ... คุณเพียงแค่ต้องระบุรหัสวิดีโอ YouTube ในตัวแปร "videoId" ....

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

3
นี่เป็นการเริ่มแอปพลิเคชัน YouTube โดยตรงโดยข้ามเมนูตัวเลือกที่คุณสามารถเลือกระหว่าง chrome และ YouTube บน JellyBean
r1k0

2
@ r1k0 ใช่ .... รหัสนี้จะเริ่มต้นแอพ Youtube เริ่มต้นโดยตรงเพื่อเล่นวิดีโอ youtube ในหุ่นยนต์ทุกประเภท oses (ไม่เพียง แต่ใน JellyBean)
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 ที่จะต้องมีการเล่น รหัสนี้ทำงานได้ดีในโมโตโรล่า

แต่โดยทั่วไปสิ่งที่เราทำได้คือการตรวจสอบว่ากิจกรรมใดที่ถูกโหลดเมื่อคุณเริ่มแอพ 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 เท่านั้น แต่หากคุณต้องการดูชื่อกิจกรรมสำหรับกิจกรรม YouTube ที่อุปกรณ์ของคุณในโหมดการแก้ไขข้อบกพร่อง USB และดู LogCat เมื่อคุณคลิกที่แอพ Youtube ควรให้ชื่อแพ็คเกจเป็นแบบไม่ระบุตัวตนพร้อมชื่อกิจกรรม
Sana

7

Youtube (และแอปพลิเคชั่นการตลาด) นั้นควรใช้กับ ROM พิเศษเท่านั้นซึ่ง Google เปิดตัวสำหรับ G1 และ G2 ดังนั้นคุณจึงไม่สามารถเรียกใช้มันใน OpenSource-ROM ได้เหมือนกับที่ใช้ใน Emulator บางทีคุณสามารถทำได้ แต่ไม่ใช่ในวิธีที่ได้รับการสนับสนุนอย่างเป็นทางการ


คุณรู้วิธีที่ไม่ได้รับการสนับสนุนไหม?
Isaac Waller

ขอโทษค่ะ เพียงแค่ไม่ต้องการแยกแยะความเป็นไปได้
เลม

6

แก้ไข: การใช้งานด้านล่างได้รับการพิสูจน์แล้วว่ามีปัญหาเกี่ยวกับอุปกรณ์ HTC อย่างน้อยบางรุ่น ด้วยเหตุนี้ฉันจึงไม่ใช้ setclassname และติดกับเมนู action chooser ฉันไม่สนับสนุนการใช้งานแบบเดิมของฉันอย่างยิ่ง

ต่อไปนี้คือการใช้งานเก่า:

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 เป็นคลาสยูทิลิตี้ส่วนตัวของฉันเองที่มี 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;
}

ก่อนอื่นฉันจะตรวจสอบว่ามีการติดตั้ง youtube หรือไม่หากมีการติดตั้งฉันจะแจ้งให้ android ทราบว่าฉันต้องการเปิดแพ็คเกจใด


ยูทิลิตี้คืออะไร? ฉันไม่เห็นว่าเป็นการนำเข้าที่มีอยู่
IgorGanapolsky

+1 สำหรับการแก้ไข การใช้ชื่อคลาสที่ชัดเจนนั้นไม่น่าเชื่อถือแน่นอน
Giulio Piancastelli

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

! น่ากลัว ดังนั้นคุณเพิ่งสร้างผู้รับออกอากาศสำหรับสิ่งนี้
ด่าน

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

วิธีนี้ใช้งานได้ดีมาก แต่เมื่อคุณเรียกใช้ Intent ปกติกับ ACTION_VIEW ผู้ใช้ URL YouTube ที่ถูกต้องจะได้รับตัวเลือกของกิจกรรมต่อไป


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 ภายใน Webview เพราะพวกเขาให้ Youtube API เล่นวิดีโอ Youtube บน Android App หากคุณจะเล่นวิดีโอ Youtube ภายในเว็บวิว Google จะลบแอปพลิเคชันของคุณออกจาก Playstore
santosh devnath

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 Android player API เพื่อเล่นวิดีโอหากมีการติดตั้งแอพ Youtube ไม่เช่นนั้นให้ผู้ใช้เลือกจากเว็บเบราว์เซอร์ที่มีอยู่

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.