Android TV系列 TV APP分析(一)

在ATV SDK中,TV APP也是一个比较重要的apk,他负责显示各种输入源,比如HDMI IN输入,AV IN输入,因为要显示不同的源,具体硬件平台又步一样,所以一定会涉及到相关定义。每一个不同的芯片,其TV APK都需要定制。本系列文章基于amlogic ATV SDK,分析amlogic  平台上是如何实现显示切换的。

一、概述

因为TV app内容比较大,所有先些个测试app来理解HDMI的显示。HDMI显示,需要两个比较关键的类

TvInputManager :管理输入源
TvView :负责显示

TvView通过tune实现显示

 this.mTvView.tune(INPUT_ID, CHANNEL_URI);

MainActivity.java

package com.mc.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.net.Uri;
import android.os.Bundle;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.tv.TvInputManager;
import android.media.tv.TvView;
import android.os.Handler;
import android.util.Log;
import android.view.Window;


public class MainActivity extends AppCompatActivity {
    private static final Uri CHANNEL_URI = Uri.parse("content://android.media.tv/passthrough/com.droidlogic.tvinput%2F.services.Hdmi1InputService%2FHW5");
    private static final String INPUT_ID = "com.droidlogic.tvinput/.services.Hdmi1InputService/HW5";
    private static final String TAG = "MainActivity";
    private TvInputChangeCallback mTvInputChangeCallback;
    private TvInputManager mTvInputManager;
    private TvView mTvView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.mTvView = (TvView) findViewById(R.id.source_view);
        this.mTvInputManager = (TvInputManager) getSystemService("tv_input");
        TvInputChangeCallback tvInputChangeCallback = new TvInputChangeCallback();
        this.mTvInputChangeCallback = tvInputChangeCallback;
        this.mTvInputManager.registerCallback(tvInputChangeCallback, new Handler());


    }

    /* access modifiers changed from: protected */
    @Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity
    public void onStart() {
       this.mTvView.tune(INPUT_ID, CHANNEL_URI);
        super.onStart();
    }
    @Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity
    public void onDestroy() {

        super.onDestroy();
    }



    private class TvInputChangeCallback extends TvInputManager.TvInputCallback {
        private TvInputChangeCallback() {
        }

        public void onInputAdded(String str) {
            Log.i(MainActivity.TAG, "onInputAdded:" + str);
            MainActivity.this.mTvView.reset();
            MainActivity.this.startAdPlay();
        }

        public void onInputRemoved(String str) {
            Log.i(MainActivity.TAG, "onInputRemoved:" + str);
        }

        public void onInputStateChanged(String str, int i) {
            Log.i(MainActivity.TAG, "onInputStateChanged:" + str + ",state:" + i);
        }

        public void onInputUpdated(String str) {
            Log.i(MainActivity.TAG, "onInputUpdated:" + str);
        }
    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#0099cc" android:layout_width="match_parent" android:layout_height="match_parent">

    <android.media.tv.TvView android:id="@+id/source_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <TextView
        android:id="@+id/tx_date"
        android:layout_width="400dip"
        android:layout_height="50dip"
        android:layout_marginTop="18dp"
        android:textColor="#000000"
        android:text="hello,welcome!"
        android:textSize="36dp"/>

</FrameLayout>

二、总结

下一章开始分析TV APP

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果您想在Android TV应用程序中监控按键,可以使用以下步骤: 1. 在应用程序的Activity或Fragment中重写onKeyDown()方法,该方法会在用户按下按键时被调用。您可以在该方法中处理按键事件。 例如: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) { // 处理确定键事件 return true; } else if(keyCode == KeyEvent.KEYCODE_BACK) { // 处理返回键事件 return true; } else { return super.onKeyDown(keyCode, event); } } ``` 2. 您也可以使用Android TV的焦点系统来处理按键事件。您可以在布局文件中使用`android:focusable="true"`和`android:focusableInTouchMode="true"`属性来为视图设置焦点,并使用`android:nextFocus***`属性来定义焦点的移动顺序。 例如: ```xml <LinearLayout android:focusable="true" android:focusableInTouchMode="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:nextFocusLeft="@+id/prev_button" android:nextFocusRight="@+id/next_button"> <Button android:id="@+id/prev_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Previous" android:nextFocusRight="@+id/next_button"/> <Button android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Next" android:nextFocusLeft="@+id/prev_button"/> </LinearLayout> ``` 这样,当用户使用遥控器上的导航键移动焦点时,焦点会按照您定义的顺序移动,并且您可以在视图的`OnClickListener`中处理确定键事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值