2017-04-19 5 views
0

안녕 내가 Chromecast의 기능을 통합하고이없는 다음과 같은 코드가 있습니다java.lang.IllegalArgumentException가 : ID 2131558727에 메뉴 항목은 기존 app.i에 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> 

나는 내가 folowing 오류를 얻고이 코드를 실행하고 때

J

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 도움말입니다 온다 왜

... 당신은에 browse.xml을 팽창하는

답변

0

귀하의 코드 :

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

당신이 메뉴를 호출하는 동안 browser.xml (추가 "r"에주의하십시오), 오타입니까? 이를 토대로 잘못된 메뉴를 선택했을 수 있습니다.