Stworzyłem aplikację, w której można pobierać filmy z YouTube dla Androida. Teraz chcę, żeby tak, jeśli grasz wideo w natywnej aplikacji YouTube, możesz je również pobrać. Aby to zrobić, muszę poznać zamiar, jaki aplikacja natywna YouTube uruchamia, aby móc grać w aplikację YouTube.
Mogłem to zrobić w prosty sposób, gdybym miał program YouTube na moim emulatorze, więc moje pierwsze pytanie brzmi:
1. Czy mogę pobrać aplikację YouTube dla mojego emulatora, lub ...
2. Jakie są używane intencje gdy użytkownik wybierze wideo do odtwarzania.Aplikacja YouTube na Androida Odtwórz wideo Intent
Odpowiedz
Youtube (i aplikacja Market) mają być używane tylko ze specjalnymi ROMami, które Google udostępnił dla G1 i G2. Więc nie możesz ich uruchomić w OpenSource-ROM, tak jak niestety w Emulatorze. Cóż, może możesz, ale nie w oficjalnie obsługiwany sposób.
Znasz nieobsługiwany sposób? –
Przepraszam, nie. Po prostu nie chciał wykluczyć tej możliwości. – Lemmy
Znaleziono go:
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) }
Awesome! Więc po prostu stworzyłeś dla tego odbiornik? – Dan
To będzie działać na urządzeniu ale nie emulatora za Lemmy's answer.
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=cxLG2wtE7TM")));
To był dla mnie zwycięzca, jeśli masz zainstalowaną aplikację YouTube, pyta, czy chcesz jej użyć. –
użyj tego kodu, aby uzyskać wybór intencji dla youtube i przeglądarki. jak to ukryć? po prostu muszę połączyć się bezpośrednio z odtwarzaczem YouTube. – Praveen
@Praveen Chandrasekaran aplikacja youtube może nie być dostępna - najlepiej użyć funkcji Intent i pozwolić systemowi na określenie, które zainstalowane aplikacje obsługują żądania. – cofiem
Można też po prostu chwycić 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;
}
pracował dobrze w mojej aplikacji.
Spróbuj tego,
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");
To nie działa dla mnie. – herbrandson
To też nie działa dla mnie. Czy jest jakikolwiek wymagany flash player w emulatorze? –
Intent videoClient = new Intent(Intent.ACTION_VIEW);
videoClient.setData(Uri.parse("http://m.youtube.com/watch?v="+videoId));
startActivityForResult(videoClient, 1234);
gdzie videoID jest id wideo z YouTube filmu, który ma być odtworzony. Ten kod działa poprawnie na Motorola Milestone.
Zasadniczo możemy jednak sprawdzić, jaka aktywność została załadowana po uruchomieniu aplikacji Youtube i odpowiednio zastąpić nazwę packageName i className.
Otrzymuję następujący błąd. 'BŁĄD/AndroidRuntime (1519): Spowodowany przez: android.content.ActivityNotFoundException: Nie można znaleźć jawnej klasy aktywności {com.google.android.youtube/com.google.android.youtube.PlayerActivity}; czy zadeklarowałeś tę aktywność w swoim AndroidManifest.xml? ' Prosimy o rozwiązanie. –
Jakie jest twoje urządzenie? Ta nazwa działania jest specyficzna tylko dla Milestone Motoroli, ale jeśli chcesz zobaczyć nazwę działania dla działania youtube, podłącz urządzenie w trybie debugowania USB i zobacz LogCat po kliknięciu na Youtube App. Powinien podać ci nazwę pakietu wraz z nazwą działania. – Sana
Spróbuj tego:
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
}
}
}
Odpowiadając na stare pytanie, żeby poinformować was, że pakiet uległy zmianie, heres aktualizacji
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);
To działa bardzo dobrze, ale podczas rozmowy normalny Intent z ACTION_VIEW z poprawnym adresem URL youtube uzyskuje selektor aktywności w każdym razie.
Oto jak rozwiązać ten problem:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + video_id);
startActivity(intent);
Teraz zrobiłem kilka badań, wygląda na to, że tylko potrzebna „vnd.youtube:VIDEO_ID” zamiast dwóch ukośników po dwukropku (” :”vs«: //»):
http://it-ride.blogspot.com/2010/04/android-youtube-intent.html
próbowałem większość sugestii tutaj i tak naprawdę nie działa bardzo dobrze ze wszystkimi rzekomych«bezpośrednich»metod podnoszących wyjątki. Zakładam, że przy mojej metodzie, jeśli aplikacja YouTube NIE jest zainstalowana, system operacyjny ma domyślną pozycję zastępczą czegoś innego niż awarię aplikacji.Ta aplikacja teoretycznie działa tylko na urządzeniach z aplikacją YouTube, więc to nie powinno być problemu.
Użyj mojego kodu .. Jestem w stanie odtwarzać wideo youtube przy użyciu tego kodu ... wystarczy, aby zapewnić youtube id wideo w zmiennej „videoID” ....
String videoId = "Fee5vbFLYM4";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId));
intent.putExtra("VIDEO_ID", videoId);
startActivity(intent);
To bezpośrednio uruchamia aplikację YouTube, z pominięciem menu wyboru, w którym możesz wybrać między chrome a YouTube na JellyBean. – r1k0
@ r1k0 Tak .... Ten kod będzie bezpośrednio uruchamiał domyślną aplikację YouTube do odtwarzania wideo z youtube we wszystkich typach androidów (nie tylko w JellyBean). –
Jeśli masz więcej niż jedną aplikację odtwarzacza YouTube (np. Firetube), nadal będzie można wybrać. Po prostu mówię i wyjaśniam. –
EDIT: poniżej wdrożenie okazało się mieć problemy na przynajmniej niektórych urządzeniach HTC (uległy awarii). Z tego powodu nie używam nazwy setclassname i trzymam się menu wyboru akcji. Zdecydowanie odradzam używanie mojej starej implementacji.
Poniżej znajduje się stary realizacja:
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);
Gdzie Utility jest moje osobiste klasy narzędzie z następującym 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;
}
Najpierw sprawdź, czy jest zainstalowany youtube, jeżeli jest on zainstalowany , Mówię Androidowi, który pakiet wolę otworzyć moje intencje.
Co to jest narzędzie? Nie widzę tego jako dostępnego importu. –
@IgorG. Dzięki za wskazanie, zaktualizowana odpowiedź. – Warpzit
+1 dla EDYCJI. Używanie wyraźnej nazwy klasy jest zdecydowanie niewiarygodne. –
I jak o tym:
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);
}
}
To powinna być najwyższa głosowana odpowiedź. –
Rekwizyty dotyczące obsługi aplikacji YouTube, jeśli są dostępne, i jeśli to konieczne, wracają do przeglądarki. Dla tych, którzy idą na to pytanie, jest to odpowiedź do użycia. –
Jak uruchomić aplikację youtube do wyszukiwania przez słowo kluczowe np. Chcę, aby aplikacja YouTube została uruchomiona, a następnie w tym poszukiwaniu "steve jobs" –
Youtube ma teraz API odtwarzacza, należy spróbować.
/**
* 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;
}
Najbezpieczniejszym sposobem, aby uruchomić wideo na innej aplikacji jest najpierw próbuje rozwiązać paczkę, innymi słowy, należy sprawdzić, czy aplikacja jest zainstalowana w urządzeniu. Jeśli więc chcesz uruchomić film na youtube, możesz zrobić coś takiego:
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);
}
To zadziała, jeśli zainstalujesz aplikację youtube. Jeśli nie, pojawi się ekran wyboru, aby wybrać inną aplikację: Prace
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));
Ta funkcja w porządku dla mnie ... po prostu przekazać ciąg URL w funkcji:
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);
}
}
Można użyć odtwarzacza YouTube na Androida API do odtwarzania wideo, jeśli zainstalowana jest aplikacja Youtube, w przeciwnym razie po prostu poproś użytkownika o wybór dostępnych przeglądarek internetowych.
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);
}
To może pomóc zbyt http://www.gadgetsaint.com/android/play-youtube-android-youtube-player-api/ – ASP