我正在尝试编写一个最简单的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;
}
答案 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
。