简体   繁体   English

如何在 Android TV 上实现 TvView?

[英]How to implement TvView on Android TV?

Goal目标

To create a reduced TvView that displays on top of a WebView .创建显示在WebView顶部的简化TvView
This is specifically for live TV.这是专门用于直播电视的。
(I've seen numerous solutions that address streaming content, but this is intended for video that's delivered through the coaxial cable.) (我已经看到许多解决流媒体内容的解决方案,但这适用于通过同轴电缆传输的视频。)

布局

Where I'm At Now我现在在哪里

The WebView portion works fine, and I've learned that a RelativeLayout is required in order to layer views. WebView部分工作正常,我了解到需要使用RelativeLayout才能对视图进行分层。
Also, TvView doesn't seem to be recognized, so I'm guessing that I'll probably need to use a SurfaceView instead.此外,似乎无法识别TvView ,所以我猜我可能需要改用SurfaceView

activity_main.xml活动_main.xml 代码示例

MainActivity.java主活动.java 在此处输入图片说明

Questions问题

I've seen the TvInput , example applications, but it's extremely excessive.我看过TvInput ,示例应用程序,但它非常过分。 I'm not trying to recreate the TvInput service, just leverage on existing framework.我不是要重新创建TvInput服务,只是利用现有框架。

  • Is it possible to simply call on the existing, TV service that's already on the Android device, and display it in a view?是否可以简单地调用 Android 设备上已有的现有电视服务,并将其显示在视图中?
  • If it is possible, how is it accomplished?如果可能,它如何实现的?
  • If it's not possible, what's the simplest method of implementing it?如果这是不可能的,什么是实现它的最简单的方法? (repository links would be great.) (存储库链接会很棒。)

I've searched all over for answers but can't seem to find anything.我到处寻找答案,但似乎找不到任何东西。
Thank you in advance for any assistance.提前感谢您的任何帮助。


Code in Text Format文本格式的代码

As requested by tung .按照要求董建华

activity_main.xml活动_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_browse_fragment"
    android:name="com.company.app.MainFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.company.app.MainActivity"
    tools:deviceIds="tv"
    tools:ignore="MergeRootFrame" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TvView
        android:id="@+id/TvView"
        android:layout_width="816dp"
        android:layout_height="404dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="25dp" />

</RelativeLayout >

MainActivity.java主活动.java

package com.company.app;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.media.tv.TvView;
import android.view.View;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings;

public class MainActivity extends Activity {
    private WebView mWebView;
    private TvView mTvView;
    private WebSettings mWebSettings;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        mWebView = new WebView(this);
        mWebSettings = mWebView.getSettings();
        mWebSettings.setJavaScriptEnabled(true);
        mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        mWebView.loadUrl("http://10.28.98.150:1000/");
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        this.setContentView(mWebView);
        mTvView = new TvView(this );
        mTvView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        this.setContentView(mTvView);
    }

    @Override
    public boolean onKeyDown(final int keyCode, final KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}
    String channelUrl="content://android.media.tv/channel/"+channelNumber;
        mTvView.tune(mInputId, Uri.parse(channelUrl));

input id is available in TV database(refering to which source channel is coming from).输入 id 在电视数据库中可用(指的是来自哪个源频道)。

If you pass these info to tvview it will start playing.如果您将这些信息传递给 tvview,它将开始播放。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM