我正在尝试编写一个最简单的TvInputService,它将使用TIF伴侣库显示一个覆盖层。
实时频道应用程序已识别我的频道Simple Channel
在我的EpgSyncJobService
子类中声明。 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;
}
根据TvInputService.Session.notifyVideoAvailable((文档:
电视输入服务必须在内容后立即调用此方法 渲染到其表面上已准备好查看。此方法必须是 每次调用 onTune(Uri( 时调用。
因此,在方法覆盖中调用notifyVideoAvailable()
就足够了BaseTvInputService.Session.onTune(Uri)
如下所示:
@Override
public boolean onTune(Uri channelUri) {
notifyVideoAvailable();
return true;
}
我必须说,使用电视伴侣库的BaseTvInputService
比使用裸TvInputService
更难找到此类问题,因为onTune()
方法在BaseTvInputService.Session
中是非抽象的。