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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值