Google Play 管理中心:Android 许多设备不支持电视应用

Google Play Console: Android TV app unsupported on many devices

我的应用程序仅支持 Android TV 设备。我已使用以下 AndroidManifest.xml 将其上传到 Google Play Developers Console

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />
<uses-feature
    android:name="android.software.leanback"
    android:required="true" />

<application
    android:name=".MediaApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/Theme.Leanback">
    <activity
        android:name=".presentation.main.MainActivity"
        android:banner="@drawable/app_icon"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:logo="@drawable/app_icon"
        android:screenOrientation="landscape">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
        </intent-filter>
    </activity>

问题是,目前它只显示 28 个支持的设备,而我用于测试应用程序的设备,例如 Nexus PlayerXiaomi Mi Box 3 显示为不受支持的消息:

This device model is not supported in your app's APK manifest and hence users of this device model cannot install your app.

其他流行的 Android TV 设备也不受支持,例如 Nvidia Shield TV。似乎 AndroidManifest.xml 对我来说一切都是正确的,所有活动都使用 android:screenOrientation="landscape"。知道为什么此类设备不可用吗?

RECORD_AUDIO权限是为了不受限制地使用麦克风。某些形式的语音输入,尤其是通过 Play 服务等平台插件输入时,可能不需要该许可。我没有玩过语音输入和 Android 电视,但至少曾几何时,应用程序无法访问 select Fire TV 遥控器上的麦克风,因为它是为系统级语音保留的search/Alexa 个命令。

RECORD_AUDIO 的问题在于它暗示您需要 android.hardware.microphone 系统功能。如果 Android 电视盒没有麦克风或不提供给应用程序开发人员直接使用,它不会声明它具有该系统功能...因此您的应用程序会阻止它。

据我所知,你的选择是:

  1. 与有限的观众一起生活,因为您的应用需要完整的麦克风访问权限

  2. 添加一个 <uses-feature> 元素来表明 android.hardware.microphone 不是必需的,然后只在实际拥有一个麦克风的设备上使用麦克风(如果完全访问麦克风对于你的应用)

  3. 完全消除麦克风使用,因此您可以放弃 RECORD_AUDIO

  4. 寻找其他方式来处理语音输入,这样你就可以放弃 RECORD_AUDIO

根据您的评论,我认为您选择了选项 #4。为了其他人遇到这个问题,您可以考虑自己回答,更详细地解释为什么您最初要求它以及为什么您觉得不再需要它。

在我的例子中,我使用了 SearchFragment from official Leanback as an example (see AndroidManifest.xml)。从那里可以看出,它尝试使用 RECORD_AUDIO 权限,这对我来说很有意义,因为有一个 Voice Input 搜索功能,我知道的大多数 Android TV 设备都使用该功能。当 RECORD_AUDIO 功能提交给 Google Play 时,大多数设备都不支持它。

但是正如@CommonsWare 回答的那样,RECORD_AUDIO 权限意味着您需要 android.hardware.microphone 系统功能。对于我使用的设备,麦克风用于 遥控器 而不是设备本身,所以这可能是这些设备无法使用 android.hardware.microphone 功能的原因.

关于为什么不再需要 RECORD_AUDIO 功能的更多解释可以在 post New permissions requirements for Android TV:

中找到

When using the Android TV Leanback support library, apps can eliminate the need for requesting RECORD_AUDIO during runtime

If you have an Android TV app targeting API Level 23, please update the app to use SpeechRecognitionCallback and remove RECORD_AUDIO permission from your manifest.

摘要:

如果您仅为 Android TV 开发应用,则无需为 API 级别 23+ 的应用指定 RECORD_AUDIO 权限。

如果您支持手机和平板电脑,您可以指定 RECORD_AUDIO 权限,但 <uses-feature android:name="android.hardware.microphone" android:required="false" /> 不需要。