在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