2

我的应用程序仅支持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". 任何想法为什么此类设备不可用?

4

2 回答 2

3

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

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

AFAIK,您的选择是:

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

  2. 添加一个不需要的<uses-feature>元素,然后仅在实际拥有麦克风的设备上使用麦克风(如果您的应用不需要完全访问麦克风)android.hardware.microphone

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

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

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

于 2017-06-01T21:01:24.863 回答
1

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

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

更多关于为什么RECORD_AUDIO不再需要功能的解释可以在Android TV 的新权限要求后找到:

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

如果您有面向 API 级别 23 的 Android TV 应用,请更新该应用以使用 SpeechRecognitionCallback 并从您的清单中删除 RECORD_AUDIO 权限。

总结

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

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

于 2017-06-02T10:04:45.243 回答