Как сохранить MediaRouter в фоновом режиме? - PullRequest
1 голос
/ 17 июня 2019

, пожалуйста, мне нужна ваша помощь после многих поисков без проблем. У меня есть приложение для демонстрации, чтобы использовать второй экран, прикрепленный к моему устройству. У меня есть исходный код приложения, они используют класс Mediarouter и класс с именем LauncherSecondScreen, расширенный от класса Presentation

Я пытался сделать приложение сервисом, чтобы приложение работало в фоновом режиме, но обратный вызов mediarouter, кажется, работает только в потоке princpal (я не уверен, что я новичок в android dev). У меня есть полный код приложения: на экране princpal показано два действия с макетом, а на втором - другое:

    public class MainActivity extends Activity {

        private final String TAG = "PresentationWithMediaRouterActivity";
        private MediaRouter mMediaRouter;
        private LauncherSecondScreen mPresentation;
        private boolean mPaused;

        /**
         * Initialization of the Activity after it is first created.  Must at least
         * call {@link android.app.Activity#setContentView setContentView()} to
         * describe what is to be displayed in the screen.
         */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // Be sure to call the super class.
            super.onCreate(savedInstanceState);

            // Get the media router service.
            mMediaRouter = (MediaRouter)getSystemService(Context.MEDIA_ROUTER_SERVICE);

            // See assets/res/any/layout/presentation_with_media_router_activity.xml for this
            // view layout definition, which is being set here as
            // the content of our screen.
            setContentView(R.layout.activity_main);

        }

        @Override
        protected void onResume() {
            // Be sure to call the super class.
            super.onResume();

            // Listen for changes to media routes.
            mMediaRouter.addCallback(MediaRouter.ROUTE_TYPE_LIVE_VIDEO, mMediaRouterCallback);

            // Update the presentation based on the currently selected route.
            mPaused = false;
            updatePresentation();
        }

        private void updatePresentation() {
            // Get the current route and its presentation display.
            MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(
                    MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
            Display presentationDisplay = route != null ? route.getPresentationDisplay() : null;

            // Dismiss the current presentation if the display has changed.
            if (mPresentation != null && mPresentation.getDisplay() != presentationDisplay) {
                Log.i(TAG, "Dismissing presentation because the current route no longer "
                        + "has a presentation display.");
                mPresentation.dismiss();
                mPresentation = null;
            }

            // Show a new presentation if needed.
            if (mPresentation == null && presentationDisplay != null) {
                Log.i(TAG, "Showing presentation on display: " + presentationDisplay);
                mPresentation = new LauncherSecondScreen(this, presentationDisplay);
                mPresentation.setOnDismissListener(mOnDismissListener);
                try {
                    mPresentation.show();
                } catch (WindowManager.InvalidDisplayException ex) {
                    Log.w(TAG, "Couldn't show presentation!  Display was removed in "
                            + "the meantime.", ex);
                    mPresentation = null;
                }
            }

            // Update the contents playing in this activity.
            updateContents();
        }

        private void updateContents() {
            // Show either the content in the main activity or the content in the presentation
            // along with some descriptive text about what is happening.
            if (mPresentation != null) {


                if (mPaused) {
                    mPresentation.dismiss();//getSurfaceView().onPause();
                } else {
                    mPresentation.show();//getSurfaceView().onResume();
                }
            } else {
               /* mInfoTextView.setText("presentation_with_media_router_now_playing_locally");
                mSurfaceView.setVisibility(View.VISIBLE);
                if (mPaused) {
                    mSurfaceView.onPause();
                } else {
                    mSurfaceView.onResume();
                }*/
            }
        }

        private final MediaRouter.SimpleCallback mMediaRouterCallback =
                new MediaRouter.SimpleCallback() {
                    @Override
                    public void onRouteSelected(MediaRouter router, int type, RouteInfo info) {
                        Log.d(TAG, "onRouteSelected: type=" + type + ", info=" + info);
                        updatePresentation();
                    }

                    @Override
                    public void onRouteUnselected(MediaRouter router, int type, RouteInfo info) {
                        Log.d(TAG, "onRouteUnselected: type=" + type + ", info=" + info);
                        updatePresentation();
                    }

                    @Override
                    public void onRoutePresentationDisplayChanged(MediaRouter router, RouteInfo info) {
                        Log.d(TAG, "onRoutePresentationDisplayChanged: info=" + info);
                        updatePresentation();
                    }
                };

        /**
         * Listens for when presentations are dismissed.
         */
        private final DialogInterface.OnDismissListener mOnDismissListener =
                new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialog) {
                        if (dialog == mPresentation) {
                            Log.i(TAG, "Presentation was dismissed.");
                            mPresentation = null;
                            updateContents();
                        }
                    }
                };
      @SuppressLint({"NewApi"})
        public class LauncherSecondScreen extends Presentation
        {
          public LauncherSecondScreen(Context paramContext, Display paramDisplay)
          {
            super(paramContext, paramDisplay/*,android.R.style.Theme_Holo_Light_Dialog_NoActionBar*/);
          }

          protected void onCreate(Bundle paramBundle)
          {
            super.onCreate(paramBundle);
            setContentView(R.layout.dialog_second_screen_content);
         ////   this.iv_secondScreen_banner = ((ImageView)findViewById(R.id.titleImage));
          }
        }                                                           
    }

приложение хорошо, оно делает один вид на экране princpale и второй вид на втором экране, но когда я возобновляю приложение на заднем плане, второй экран принимает тот же вид первого экрана. Я хочу, чтобы второе представление отображалось на втором экране, даже когда я возобновляю приложение для использования другого приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...