You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Android TV上以编程方式获取可用输入源并切换

Android TV 获取并切换输入源实现方案

当然可以实现!在Android TV开发中,我们主要依赖系统提供的TvInputManager服务来完成输入源的获取与切换操作,下面我一步步给你拆解具体实现:

一、获取可用输入源

要获取电视的所有可用输入源,步骤很清晰:

  1. 获取TvInputManager实例
    在Activity或者Context类中,通过系统服务获取实例:

    TvInputManager tvInputManager = (TvInputManager) getSystemService(Context.TV_INPUT_SERVICE);
    
  2. 获取输入源列表
    调用getTvInputList()方法就能拿到所有已注册的输入源信息,返回的是List<TvInputInfo>集合:

    List<TvInputInfo> inputList = tvInputManager.getTvInputList();
    
  3. 遍历并提取输入源信息
    遍历这个集合,你可以获取每个输入源的关键信息,比如唯一ID(切换时需要用到)、名称、输入类型(HDMI、AV、内置电视等):

    for (TvInputInfo inputInfo : inputList) {
        String inputId = inputInfo.getId(); // 输入源唯一ID,切换时必备
        String inputName = inputInfo.loadLabel(getPackageManager()).toString(); // 输入源名称
        int inputType = inputInfo.getType(); // 输入源类型,比如TvInputInfo.TYPE_HDMI
    
        // 可以根据需求筛选,比如只保留HDMI输入源
        if (inputType == TvInputInfo.TYPE_HDMI) {
            Log.d("TV_INPUT", "HDMI输入源:" + inputName + ",ID:" + inputId);
        }
    }
    

二、程序化切换输入源

拿到目标输入源的ID后,就可以调用API完成切换了:

  1. 调用切换方法
    还是用刚才的TvInputManager实例,调用switchToInput()方法传入目标ID:

    String targetInputId = "这里填你要切换的输入源ID";
    tvInputManager.switchToInput(targetInputId);
    
  2. 权限与注意事项

    • 必须在AndroidManifest.xml中声明权限:
      <uses-permission android:name="android.permission.ACCESS_TV_INPUTS" />
      
    • 系统版本要求:TvInputManager是从**API Level 21(Android 5.0)**开始引入的,所以你的应用要适配这个版本及以上。
    • 设备限制:部分厂商的定制Android TV系统可能会限制第三方应用切换输入源,比如需要系统签名或者用户手动授权,这种情况你需要在应用中提示用户手动操作,或者联系厂商获取特殊权限。
    • 异常处理:切换前最好判断输入源ID是否有效,避免抛出异常:
      if (tvInputManager.getTvInputInfo(targetInputId) != null) {
          tvInputManager.switchToInput(targetInputId);
      } else {
          Log.e("TV_INPUT", "目标输入源不存在");
      }
      

额外提示

如果你的应用需要处理输入源变化的回调,可以注册TvInputManager.TvInputCallback监听输入源的添加、移除或状态变更,这样能实时更新输入源列表:

tvInputManager.registerCallback(new TvInputManager.TvInputCallback() {
    @Override
    public void onInputAdded(String inputId) {
        super.onInputAdded(inputId);
        // 输入源添加时刷新列表
    }

    @Override
    public void onInputRemoved(String inputId) {
        super.onInputRemoved(inputId);
        // 输入源移除时刷新列表
    }
}, null);

内容的提问来源于stack exchange,提问作者Manju Kumari

火山引擎 最新活动