About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jul

    21

    AS3 如何判断 iOS 用户是否禁用了麦克风(Microphone muted bug?)

    • 1 Comments
    • Flash Platform
    • 发布:古树悬叶
    • 引用:0
    • 浏览:

    发现 AS3 调用与系统相关的 API 功能时经常会发现 Bug,虽然这些 API 在桌面设备上看起来运行状态良好,但在移动开发时总会与实际情况不符。

    Microphone 类中有一个 muted 属性,可以用来判断用户是否禁用了麦克风访问权限。在网页中与纯 FlashPlayer 里它运行状况良好,但在 iOS 系统里测试时“XXXX 想访问您的麦克风”,无论我选择“不允许”或“好”,它它总是返回 false。然后又是一边 SDK 版本的替换(啊,又是一个“又”),从 SDK 16,换到17、18 测试结果都一样(因为 19 还是 Beta 版,我也懒的去测了)。

    Google 之,发现早在 4.0 版本时就已经有人在 Adobe 官方论坛提交过这个问题,官方没有作任何回复(除了有一个网友回复了一个无关紧要的相册访问的贴子,因为相册是一个应用,它会从一个应用给出提示,而 Microphone 是一个硬件,所以出错后是不会给你提示的;特别是:它的属性在返回时就已经出错了——“把错的当成对的,怎么可能再给出一个错的提示?”)。

    曲线救国的办法:在 setSilenceLevel() 方法中将 silenceLevel 值设为 0,让麦克风对象的 ActivityEvent.ACTIVITY 事件立即执行。建立一个实例变量并设为 false,在 activity 事件侦听器函数中把这个变量设为 true,加一个类似 setTimeout() 函数在200 或 500 毫秒后检测这个变量是否为 true,就可以判断出 activity 事件是否执行过。如果执行过表示有麦克风的访问权限,如果没有执行过,就表过没有权限,给出一个用户提示“设置——隐私——麦克风——XX应用”打开权限。

    Post Comment.
    quote 1.古树悬叶
    2015/7/21 7:16:42
    另外在 iOS 的权限弹出对话框中,无论选择“好”或“不允许”,发现并不会调用 StatusEvent.STATUS 事件。SDK 16,17,18 都没有调用。

    发表评论