7

Opracowałem aplikację, która używa YouTube android API, aby odtworzyć określone wideo w aplikacji. W tym czasie użyłem jako interfejsu API celu 19, a także interfejsu API 19. Teraz chcę zmienić projekt przełączania aplikacji na Material Design za pomocą interfejsu API celu 22, a także za pomocą AppCompat-v7 :22+ library. Ale YouTubeBaseActivity nie można otworzyć, a aplikacja ulega awarii. Poniżej opublikuję to, co dotychczas zrobiłem.YouTubePlayer wraz z biblioteką AppCompat v7

EventDetail.java

public class EventDetail extends YouTubeBaseActivity implements 
     YouTubePlayer.OnInitializedListener { . 
. 
. 
protected void onCreate(Bundle savedInstanceState) { 

     // remove the shadow from action bar 
     setTheme(R.style.Theme_TranslucentActionBar_ActionBar_NoOverlay); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_event_detail); 

     // enable back button 

     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // setting the action bar initially transparent 
     mActionBarBackgroundDrawable = new ColorDrawable(
       Color.parseColor("#ec5c59")); 
     mActionBarBackgroundDrawable.setAlpha(0); 

     getSupportActionBar().setBackgroundDrawable(mActionBarBackgroundDrawable); 

     // binding the scrollview 

... 

pliku manifestu

<activity 
     android:name="com.dev.apk.evente.al.EventDetail" 
     android:icon="@drawable/ikona_projekte" 
     android:label="@string/title_activity_event_detail" 
     android:screenOrientation="portrait" 
     android:theme="@style/Theme.TranslucentActionBar.ActionBar.Overlay" /> 

Layut Plik:

<RelativeLayout 
    android:id="@+id/video_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dp" 
    android:paddingLeft="23dp" 
    android:paddingRight="23dp" 
    android:paddingBottom="15dp" 
    android:background="@drawable/event_background_block" > 

    <TextView 
     android:id="@+id/video_label" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:background="@color/white" 
     android:gravity="left" 
     android:paddingTop="10dp" 

     android:paddingBottom="10dp" 
     android:text="Video" 
     android:textColor="@color/VeryDarkGray" 
     android:textSize="22sp" > 
    </TextView> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_view" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/video_label" 
     android:background="@color/white" /> 
</RelativeLayout> 

Theme.xml File

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <style name="Theme.TranslucentActionBar" parent="Theme.AppCompat.Light.DarkActionBar"> 

     <item name="android:actionBarStyle">@style/Widget.ActionBar</item> 
    </style> 

    <style name="Theme.TranslucentActionBar.ActionBar" /> 

    <style name="Theme.TranslucentActionBar.ActionBar.Overlay"> 
     <item name="android:actionBarStyle">@style/Widget.ActionBar.Transparent</item> 
     <item name="android:windowActionBarOverlay">true</item> 
     <item name="colorPrimary">@color/evente_date_color</item> 
     <item name="colorPrimaryDark">@color/evente_darken_color</item> 
    </style> 

    <!-- Theme without ActionBar shadow (inherits main theme) --> 

    <style name="Theme.TranslucentActionBar.ActionBar.NoOverlay" parent="Theme.TranslucentActionBar.ActionBar.Overlay"> 
     <item name="android:windowContentOverlay">@null</item> 
    </style> 

</resources> 

Tak więc na początku nie otwiera się, ponieważ metoda getActionBar() zwraca wartość Null, a następnie zmieniłem ją na getSupportActionBar(), ale ja jej nie rozpoznałem. Następnie na koniec zmieniłem tę linię w następujących przypadkach:

public class EventDetail extends AppCompatActivity implements 
     YouTubePlayer.OnInitializedListener { 

i to daje mi następujący błąd:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myikub.al/com.dev.apk.evente.al.EventDetail}: android.view.InflateException: Binary XML file line #250: Error inflating class com.google.android.youtube.player.YouTubePlayerView 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$600(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:5406) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #250: Error inflating class com.google.android.youtube.player.YouTubePlayerView 
    at android.view.LayoutInflater.createView(LayoutInflater.java:620) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
    at com.dev.apk.evente.al.EventDetail.onCreate(EventDetail.java:112) 
    at android.app.Activity.performCreate(Activity.java:5303) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$600(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:5406) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Constructor.constructNative(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
    at com.dev.apk.evente.al.EventDetail.onCreate(EventDetail.java:112) 
    at android.app.Activity.performCreate(Activity.java:5303) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$600(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:5406) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context. 
    at com.google.android.youtube.player.YouTubePlayerView.<init>(Unknown Source) 
    .... 

Używam Android Studio. Każdy pomysł zostanie doceniony.

+0

Myślę, że trzeba sprawdzić więcej informacji tutaj: https://developers.google.com/youtube/android/player/sample-applications –

Odpowiedz

12

Problemem jest to, że używasz YouTubePlayerView, który wymaga, aby Activity przedłużyć YouTubeBaseActivity. Następnie zmieniłeś swoją działalność, aby teraz rozszerzyła się na AppCompatActivity. To łamie YouTubePlayerView.

Rozwiązanie jest dość proste: użyj klasy. Nie stanowi to żadnego wymogu na Activity, pozostawiając użytkownikowi wiele opcji do tworzenia motywów.

+0

Dzięki @dextor , rozwiązał mój problem, właśnie skończyłem go wdrażać i działa jak poprzednio. – Xhulio

+0

, ale jest jeden problem, ale gdy próbuję uruchomić aplikację na urządzeniu Lollipop z systemem Android, pojawia się następujący błąd: Intencja usługi musi być jednoznaczna: Intent {act = com.google.android.youtube.api.service. START} – Xhulio

+1

Dzieje się tak, ponieważ używasz starej wersji SDK. Aktualizacja do wersji 1.2.1 rozwiązuje ten problem. – Sebastiano

0

Według stosie prześledzić działalność musi przedłużyć YouTubeBaseActivity podczas korzystania z API YouTube

Jeśli trzeba mieć actionbar to myślę, że najlepszym sposobem jest zmiana stylu nie mieć actionbar i po prostu użyć toolbar w twoim widoku.

0

wklej ten kod wewnątrz Gradle aplikacji

compile 'com.google.android.gms:play-services:8.4.0' 
compile files('libs/YouTubeAndroidPlayerApi.jar') 
Powiązane problemy