2014-10-20 2 views
19

내 활동은 다른 활동을 확장하고 각 항목이 새로운 조각을 여는 탐색 서랍으로 구성됩니다 .Youtube를 조각 중 하나로 통합하려고합니다. 이전에 YouTubePlayerView를 사용하여 Youtube를 활동에 통합했지만 여기에 있습니다. 난 그물을 검색하고 YouTubePlayerFragment를 발견하여 조각을 YouTube에 통합했습니다. 내가 튜토리얼에서 검색하지만 난 YouTubePlayerFragment를 사용하여 우리가 YouTubeBaseActivity .These이 예 확장되는 것을 발견 .. http://android-coding.blogspot.in/2013/04/example-to-use-youtubeplayerfragment-of.html http://android-er.blogspot.in/2013/06/example-to-use-youtubeplayerfragment-of.html조각에 통합 YouTube

나는 내 수업이 아니라 YouTubeBaseActivity보다 조각을 확장하는 것이 YouTubePlayerFragment는 사용하는 방법을 이해하지 못한 내 프로젝트에 필요합니다. 내 수업 시간에 볼 수있는 것처럼 다른 활동을 확장하고 다섯 번째 옵션이 YouTube Fragment를 여는 탐색 서랍으로 구성되어 있습니다.이 조각 내에서 YouTube 동영상을 재생하고 싶습니다. 수업 준비 방법을 간단히 설명합니다. -

public class LandingActivity extends BaseGActivity { 
. 
. 
. 
. 


public void selectDrawerItem(int position) { 

     Bundle args = new Bundle(); 

     switch (position) { 
      case 0: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
      case 1: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_PHOTO); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
// 
      case 2: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_AUDIO); 
       GApplication.getInstance().stopGPlayer(); 
       break; 

      case 3: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_VIDEO); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
      case 4: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_MEME); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
      case 5: 
       currentFragment = new YoutubeFragment(); 
      default: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
     } 

     currentFragment.setArguments(args); 
     FragmentManager frgManager = getFragmentManager(); 
     frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
       .commit(); 

     mDrawerList.setItemChecked(position, true); 
     setTitle(dataList.get(position).getItemName()); 
     mDrawerLayout.closeDrawers(); 
    } 


    public class YoutubeFragment extends Fragment implements YouTubePlayer.OnInitializedListener{ 
     private FragmentActivity myContext; 

     private YouTubePlayer YPlayer; 
     private static final String YoutubeDeveloperKey = "xyz"; 
     private static final int RECOVERY_DIALOG_REQUEST = 1; 
     @Override 
     public void onAttach(Activity activity) { 

      if (activity instanceof FragmentActivity) { 
       myContext = (FragmentActivity) activity; 
      } 

      super.onAttach(activity); 
     } 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false); 

      YouTubePlayerView youTubeView = (YouTubePlayerView) rootView.findViewById(R.id.youtube_view); 
      youTubeView.initialize(YoutubeDeveloperKey, (YouTubePlayer.OnInitializedListener) myContext); 
      return rootView; 
     } 
     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider provider, 
              YouTubeInitializationResult errorReason) { 
      if (errorReason.isUserRecoverableError()) { 
       errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show(); 
      } else { 
       String errorMessage = String.format(
         "There was an error initializing the YouTubePlayer", 
         errorReason.toString()); 
       Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode == RECOVERY_DIALOG_REQUEST) 
      { 

       getYouTubePlayerProvider().initialize(YoutubeDeveloperKey, this); 
      } 
     } 



     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, 
              YouTubePlayer player, boolean wasRestored) { 
      if (!wasRestored) { 
       YPlayer = player; 
       YPlayer.setFullscreen(true); 
       YPlayer.loadVideo("2zNSgSzhBfM"); 
       YPlayer.play(); 
      } 
     } 

    } 

YouTubeFrag ment.java

public class YoutubeFragment extends Fragment implements 
     YouTubePlayer.OnInitializedListener { 
    private FragmentActivity myContext; 

private YouTubePlayer YPlayer; 
private static final String YoutubeDeveloperKey = "xyz"; 
private static final int RECOVERY_DIALOG_REQUEST = 1; 

@Override 
public void onAttach(Activity activity) { 

    if (activity instanceof FragmentActivity) { 
     myContext = (FragmentActivity) activity; 
    } 

    super.onAttach(activity); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false); 

    YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance(); 

    youTubePlayerFragment.initialize("DEVELOPER_KEY", new YouTubePlayer.OnInitializedListener() { 


    }); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 
    return rootView; 

} 
    @Override 
    public void onInitializationSuccess (YouTubePlayer.Provider provider, YouTubePlayer 
    youTubePlayer,boolean b){ 
     if (!b) { 
      YPlayer = youTubePlayer; 
      YPlayer.setFullscreen(true); 
      YPlayer.loadVideo("2zNSgSzhBfM"); 
      YPlayer.play(); 
     } 
    } 

    @Override 
    public void onInitializationFailure (YouTubePlayer.Provider 
    provider, YouTubeInitializationResult youTubeInitializationResult){ 

    } 
} 

레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <fragment 
     android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" 
     android:id="@+id/youtube_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

오류 -

Error:(64, 101) error: <anonymous com.pc.gi.ui.fragment.YoutubeFragment$1> is not abstract and does not override abstract method onInitializationFailure(Provider,YouTubeInitializationResult) in OnInitializedListener 
+0

당신의 조각입니다. 내 첫 번째 시도는 YoutubePlayerFragment를 사용했지만 그 API는 약간 비현실적이어서 매우 부드러운 사용자 경험을 제공하지 못했습니다 ... 그래서 YouTube iframe API (https://developers.google.com/youtube/iframe_api_reference)를 시도했습니다.) WebView 내부. Android WebView는 모든 HTML5 기능을 지원하지 않으므로 혼자서해야 할 일이 있지만 ... (https://code.google.com/p/html5webview/) 시작하는 것이 좋습니다. 최종 결과는 그만한 가치가 있습니다. –

+0

다음을 시도해보십시오. http : //stackoverflow.com/questions/34803095/android-studio-google-map-api-with-fragments –

답변

54

먼저 레이아웃 파일에

class YourActivity extends Activity... 

는 아래의 라인을 넣어 정상으로 당신의 활동을 확장

<fragment 
    android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" 
    android:id="@+id/youtube_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

그런 다음 작업에서 단편의 onCreareView 메소드에서 아래 라인을 사용하여 인스턴스를 만들 수 있습니다.

YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getActivity().getSupportFragmentManager() 
        .findFragmentById(R.id.youtube_fragment); 

또는 다음 XML에 FrameLayout이를 선언 할 수는 YouTubeSupportFragment가 여기 onCreateView

YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance(); 

    youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() { 

     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 

      if (!wasRestored) { 
       YPlayer = player; 
       YPlayer.setFullscreen(true); 
       YPlayer.loadVideo("2zNSgSzhBfM"); 
       YPlayer.play(); 
      } 

     } 

     @Override 
     public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 

중요한 일에 선 아래

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <FrameLayout 
     android:id="@+id/youtube_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:visibility="visible" /> 

</RelativeLayout> 

코드를 사용하여 YouTubePlayerSupportFragment을 사용하는 것입니다 시작 YouTubePlayerFragment 대신.

희망이 도움이됩니다.

다음은 내가 최근에 내 응용 프로그램에서 YouTube 동영상 플레이어를 구현했습니다

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.youtube.player.YouTubeInitializationResult; 
import com.google.android.youtube.player.YouTubePlayer; 
import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener; 
import com.google.android.youtube.player.YouTubePlayer.Provider; 
import com.google.android.youtube.player.YouTubePlayerSupportFragment; 
import com.ismart.omanapp.R; 

public class YoutubeFragment extends Fragment { 
    private FragmentActivity myContext; 

    private YouTubePlayer YPlayer; 
    private static final String YoutubeDeveloperKey = "xyz"; 
    private static final int RECOVERY_DIALOG_REQUEST = 1; 

    @Override 
    public void onAttach(Activity activity) { 

     if (activity instanceof FragmentActivity) { 
      myContext = (FragmentActivity) activity; 
     } 

     super.onAttach(activity); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false); 

     YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance(); 
     FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
     transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 

     youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() { 

      @Override 
      public void onInitializationSuccess(Provider arg0, YouTubePlayer youTubePlayer, boolean b) { 
       if (!b) { 
        YPlayer = youTubePlayer; 
        YPlayer.setFullscreen(true); 
        YPlayer.loadVideo("2zNSgSzhBfM"); 
        YPlayer.play(); 
       } 
      } 

      @Override 
      public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
       // TODO Auto-generated method stub 

      } 
     }); 

    } 
} 
+0

Hii..i 조각 내에서 YouTube 비디오를 재생하고 싶습니다. 내 활동은 탐색 서랍으로 구성됩니다. 다섯 번째 항목을 클릭하면 YouTube 비디오가 재생되는 부분이 열립니다.이 코드를 활동 안에 배치하면 내비게이션 서랍의 다섯 번째 항목을 클릭하면 youtube 비디오가 재생됩니다 .. 활동 내에서만 YouTube 비디오가 재생되기 시작합니다. 조각을 확장하는 클래스 내에서 코드를 배치해야합니다. 내 질문을 다시 읽으십시오. .. uru 시간에 대한 thanku .. –

+1

사실 당신은 당신의 파편 안에 YoutubeFragment를 원합니다. getSupportedFragmentManager() 대신에'getChildFragmentManager()'를 사용해야합니다. – Sunny

+0

두 번째 방법을 사용해야합니다. 즉 XML 파일을 만들고 그 안에 frameLayout을 배치하고 위에 쓴 코드를 조각 'onCreateView'에서 사용합니다. – Sunny