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 Player
和 Xiaomi 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
。如果您的应用程序可以在没有该功能的情况下运行,请添加一个 <uses-feature>
元素(类似于您的 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,您的选择是:
与有限的观众一起生活,因为您的应用需要完整的麦克风访问权限
添加一个<uses-feature>
元素以表明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
权限,但<uses-feature android:name="android.hardware.microphone" android:required="false" />
不需要。
【讨论】:
以上是关于Google Play 控制台:许多设备不支持 Android TV 应用的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 google play console 不支持的设备(OpenGL ES 和框架版本)