0

我的应用程序只支持Android TV设备。我已经将它上传到Google Play Developers Console具有以下AndroidManifest.xml谷歌游戏控制台:Android TV的应用不支持的许多设备上

<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设备也不受支持。似乎好像一切是正确的AndroidManifest.xml对我和所有活动都使用android:screenOrientation="landscape"。任何想法为什么这种设备不可用?

+0

尝试删除'RECORD_AUDIO'。 – CommonsWare

+0

@CommonsWare但如果它使用记录音频进行语音搜索呢?在这里查看他们的官方示例https://github.com/googlesamples/leanback-showcase。 –

+0

我不知道你引用的设备提供的硬件功能是否提供'android.hardware.microphone'系统功能。我必须假设只有一部分Android TV设备提供了它。并且,通过请求“RECORD_AUDIO”,您*要求*设备支持“android.hardware.micrphone”。如果你的应用程序可以没有这个功能,那么添加一个''元素(类似于你的'触摸屏')来表示它不是必需的,并且在运行时检查它。也许它会帮助扩大你的范围。 – CommonsWare

回答

1

RECORD_AUDIO权限是不受限制的使用麦克风。某些形式的语音输入,特别是通过Play Services等平台附加软件时,可能不需要该权限。/Alexa的命令,我还没有和语音输入和Android电视上回放,但在一个时间至少一次,应用程序必须在选择点火电视遥控器麦克风进不去,因为这是保留给系统级语音搜索。

RECORD_AUDIO搭配的是它暗示你需要android.hardware.microphone系统功能。如果Android TV盒缺少麦克风,或者不提供它供应用开发人员直接使用,则不会声明它具有该系统功能...因此,您的应用会阻止它。

据我所知,你的选择是:

  1. 现场与观众有限,因为你的应用程序需要完整的麦克风接入

  2. 添加<uses-feature>元说,android.hardware.microphone不是必需的,那么只有使用在设备上的麦克风,实际上有一个(如果完全麦克风访问是不是你的应用程序必需)

  3. 消除麦克风的使用完全,这样就可以把RECORD_AUDIO

  4. 寻找一些其他的方式来处理语音输入,这样就可以把RECORD_AUDIO

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

0

在我的情况中,我使用了官方Leanback的SearchFragment作为示例(请参阅AndroidManifest.xml)。由于可以在那里看到的,它会尝试使用这对我来说是有意义的RECORD_AUDIO许可是有Voice Input功能为这是对我最知道Android TV设备使用的搜索。当RECORD_AUDIO功能提交到Google Play时,它在大多数设备上都不受支持。

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

上为什么不再需要RECORD_AUDIO功能更多的说明可以在后期New permissions requirements for Android TV发现:

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

如果您有一个针对API Level 23的Android TV应用程序,请更新 该应用程序以使用SpeechRecognitionCallback并从清单中删除RECORD_AUDIO 权限。

摘要

如果你开发的应用程序Android TV只,没有必要指定应用定位API等级23+ RECORD_AUDIO许可。

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

相关问题