使TvInputService显示叠加层

时间:2018-01-23 10:19:44

标签: android-tv

我正在尝试编写一个最简单的TvInputService,它将使用TIF Companion Library显示叠加层。

Live Channels应用程序已经识别我的Simple Channel子类中声明的频道EpgSyncJobService。 {Live 1s}的EPG中显示My Program作为当前呈现的EPG。 然而,我所能看到的只是蓝色旋转器,好像通道没有调整"。

我做错了什么?

public class MyTvInputService extends BaseTvInputService {
        @Override
    public final BaseTvInputService.Session onCreateSession(String inputId) {
        BaseTvInputService.Session session = new MyTvInputSession(this, inputId);
        session.setOverlayViewEnabled(true);
        return super.sessionCreated(session);
    }

    class MyTvInputSession extends BaseTvInputService.Session {
        public MyTvInputSession(Context context, String inputId) {
            super(context, inputId);
        }

        @Override
        public View onCreateOverlayView() {
            mTextView = new TextView(MyTvInputService.this);
            mTextView.setText("This is an example overlay");
            mTextView.setTextColor(Color.RED);
            mTextView.setVisibility(View.VISIBLE);
            mTextView.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            return mTextView;
        }

        @Override
        public boolean onPlayProgram(Program program, long startPosMs) {
            return true;
        }

        @Override
        public boolean onPlayRecordedProgram(RecordedProgram recordedProgram) {
            return true;
        }

        @Override
        public void onSetCaptionEnabled(boolean enable) {}

        @Override
        public TvPlayer getTvPlayer() { return null; }
    }
    private TextView mTextView;
}

1 个答案:

答案 0 :(得分:0)

根据TvInputService.Session.notifyVideoAvailable() documentation

  

电视输入服务必须尽快调用此方法   渲染到其表面上已准备好观看。这种方法必须是   每次调用onTune(Uri)时调用。

因此,在notifyVideoAvailable()方法覆盖中调用BaseTvInputService.Session.onTune(Uri)就足够了,如下所示:

@Override
public boolean onTune(Uri channelUri) {
    notifyVideoAvailable();
    return true;
}

我必须说,使用电视伴侣图书馆的BaseTvInputService会比使用裸TvInputService更难找到这些问题,因为onTune()方法是非抽象的BaseTvInputService.Session