Google Play 控制台:许多设备不支持 Android TV 应用

Posted

技术标签:

【中文标题】Google Play 控制台:许多设备不支持 Android TV 应用【英文标题】:Google Play Console: Android TV app unsupported on many devices 【发布时间】:2017-11-03 03:06:40 【问题描述】:

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

<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 显示为不受支持,并显示消息:

您应用的 APK 清单不支持此设备型号,并且 因此,此设备型号的用户无法安装您的应用。

其他流行的Android TV 设备(如Nvidia Shield TV)也不支持。对我来说,AndroidManifest.xml 中的所有内容似乎都是正确的,所有活动都使用android:screenOrientation="landscape"。任何想法为什么它不适用于此类设备?

【问题讨论】:

尝试删除RECORD_AUDIO @CommonsWare 但是如果它使用录制音频进行语音搜索呢?在此处查看他们的官方示例github.com/googlesamples/leanback-showcase。 我不知道您引用的设备是否提供硬件功能提供android.hardware.microphone 系统功能。我不得不假设只有一部分 Android TV 设备提供它。而且,通过请求RECORD_AUDIO,您要求设备支持android.hardware.micrphone。如果您的应用程序可以在没有该功能的情况下运行,请添加一个 &lt;uses-feature&gt; 元素(类似于您的 touchscreen 元素)以说明它不是必需的,并在运行时检查它。也许这将有助于扩大您的影响范围。 另外,请记住,您可能使用的库会注入它们自己的权限和可能的硬件要求。检查合并的清单,当您编辑 AndroidManifest.xml 时,您可以在 Android Studio 的子选项卡中使用该清单,并查看其中的所有内容是否符合您的预期。 好的,谢谢您的回答!似乎我在这里找到了另一个证据android-developers.googleblog.com/2015/09/…。 When using the Android TV Leanback support library, apps can eliminate the need for requesting RECORD_AUDIO during runtime。我会在上传新版本后立即查看。 【参考方案1】:

RECORD_AUDIO 权限用于不受限制地使用麦克风。某些形式的语音输入,尤其是通过 Play Services 等平台插件时,可能不需要该权限。我没有玩过语音输入和 Android TV,但至少有一次,应用程序无法访问特定 Fire TV 遥控器上的麦克风,因为它是为系统级语音搜索/Alexa 命令保留的。

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

AFAIK,您的选择是:

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

    添加一个&lt;uses-feature&gt; 元素以表明android.hardware.microphone 不是必需的,然后仅在实际拥有麦克风的设备上使用麦克风(如果您的应用不需要完全访问麦克风)

    完全不用麦克风,这样你就可以放弃RECORD_AUDIO

    想办法处理语音输入,这样你就可以放弃RECORD_AUDIO

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

【讨论】:

【参考方案2】:

就我而言,我使用了来自官方 Leanback 的 SearchFragment 作为示例(请参阅 AndroidManifest.xml)。从那里可以看出,它尝试使用RECORD_AUDIO 权限,这对我来说很有意义,因为我知道的大多数Android TV 设备上都使用了Voice Input 搜索功能。当RECORD_AUDIO 功能提交给Google Play 时,大多数设备都不支持它。

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

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

使用 Android TV Leanback 支持库时,应用可以消除 需要在运行时请求 RECORD_AUDIO

如果您有面向 API 级别 23 的 Android TV 应用,请更新 应用程序使用 SpeechRecognitionCallback 并删除 RECORD_AUDIO 来自您的清单的许可。

总结

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

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

【讨论】:

以上是关于Google Play 控制台:许多设备不支持 Android TV 应用的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 google play console 不支持的设备(OpenGL ES 和框架版本)

设备支持警告:Google play 2019

如何让我的 google play 应用支持更多设备?

Android 应用不支持 Google Play 设备目录中的热门设备

Google Play 说我的设备不支持我的应用

支持的设备 0. Google Play 发布