2017-04-19 9 views
0

您好我是集成的Chromecast功能整合到我現有的app.i有以下代碼:java.lang.IllegalArgumentException異常:與ID 2131558727菜單項不具有MediaRouteActionProvider

public class VideoBrowserActivity extends AppCompatActivity { 

    private static final String TAG = "VideoBrowserActivity"; 
    private boolean mIsHoneyCombOrAbove = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; 
    private Toolbar mToolbar; 
    private CastContext mCastContext; 
    private MenuItem mediaRouteMenuItem; 
    private IntroductoryOverlay mIntroductoryOverlay; 
    private CastStateListener mCastStateListener; 

    /* 
    * (non-Javadoc) 
    * @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle) 
    */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.video_browser); 
     setupActionBar(); 

     mCastStateListener = new CastStateListener() { 
      @Override 
      public void onCastStateChanged(int newState) { 
       if (newState != CastState.NO_DEVICES_AVAILABLE) { 
        Log.e("DEBUG","==="); 
        showIntroductoryOverlay(); 
       } 
      } 
     }; 

     mCastContext = CastContext.getSharedInstance(this); 
    } 

    @Override 
    protected void onResume() { 
     mCastContext.addCastStateListener(mCastStateListener); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     mCastContext.removeCastStateListener(mCastStateListener); 
     super.onPause(); 
    } 


    private void setupActionBar() { 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     mToolbar.setTitle(R.string.app_name); 
     setSupportActionBar(mToolbar); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.browse, menu); 
     mediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), menu, 
       R.id.media_route_menu_item); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     Intent i; 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       i = new Intent(VideoBrowserActivity.this, CastPreference.class); 
       startActivity(i); 
       break; 
     } 
     return true; 
    } 

    @Override 
    protected void onDestroy() { 
     Log.d(TAG, "onDestroy is called"); 
     super.onDestroy(); 
    } 


    private void showIntroductoryOverlay() { 
     if (mIntroductoryOverlay != null) { 
      mIntroductoryOverlay.remove(); 
     } 
     if ((mediaRouteMenuItem != null) && mediaRouteMenuItem.isVisible()) { 
      new Handler().post(new Runnable() { 
       @Override 
       public void run() { 
        mIntroductoryOverlay = new IntroductoryOverlay.Builder(
          VideoBrowserActivity.this, mediaRouteMenuItem) 
          .setTitleText("Introducing Cast") 
          .setSingleTime() 
          .setOnOverlayDismissedListener(
            new IntroductoryOverlay.OnOverlayDismissedListener() { 
             @Override 
             public void onOverlayDismissed() { 
              mIntroductoryOverlay = null; 
             } 
            }) 
          .build(); 
        mIntroductoryOverlay.show(); 
       } 
      }); 
     } 
    } 
} 

,這些都是XML文件

browswer.xml

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

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
      android:id="@+id/media_route_menu_item" 
      android:title="@string/media_route_menu_title" 
      app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider" 
      app:showAsAction="always"/> 

    <item 
      android:id="@+id/action_settings" 
      android:title="@string/action_settings" 
      app:showAsAction="never"/> 

</menu> 

和expanded_controller.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
      android:id="@+id/media_route_menu_item" 
      android:title="@string/media_route_menu_title" 
      app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider" 
      app:showAsAction="always"/> 

</menu> 

當我運行此代碼我得到如下因素誤差

Ĵ

ava.lang.IllegalArgumentException: menu item with ID 2131558727 doesn't have a MediaRouteActionProvider. 
                       at com.google.android.gms.cast.framework.CastButtonFactory.setUpMediaRouteButton(Unknown Source) 
                       at com.calkins.tv_everywhere.VideoBrowserActivity.onCreateOptionsMenu(VideoBrowserActivity.java:1168) 
                       at android.app.Activity.onCreatePanelMenu(Activity.java:3128) 
                       at com.android.internal.policy.PhoneWindow.preparePanel(PhoneWindow.java:648) 
                       at com.android.internal.policy.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:1029) 
                       at com.android.internal.policy.PhoneWindow$1.run(PhoneWindow.java:341) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7231) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

爲什麼這個錯誤來了,我很confused.Any幫助...

回答

0

您在充氣browse.xml您的代碼:

getMenuInflater().inflate(R.menu.browse, menu); 

當您撥打您的菜單browser.xml(注意額外的「r」),是一個錯字?基於此,您可能會選擇錯誤的菜單。

相關問題