Android 解锁设备麦克风

问题描述 投票:0回答:1

我创建了一个 Android 应用程序,它提供了通过语音识别和语音搜索来搜索产品的选项。 它适用于除 Pixel 手机之外的所有手机。 由于 Pixel 手机具有新功能“阻止麦克风访问”、“阻止相机访问”,这些都是硬件级别的阻止。我的应用程序无法检测到麦克风被阻挡。 尽管我已经使用 Audiomanager 检查了麦克风是否静音,并且使用包管理器检查了麦克风是否静音,但一切都返回 true。 由于这是 Pixel 手机中限制访问硬件的新功能,因此我找不到解决方案。

我尝试使用包管理器来检测麦克风是否可用。 另外,尝试音频管理器来检测麦克风是否静音。 但一切仍然回归真实。

android kotlin microphone android-hardware
1个回答
0
投票

尝试这个解决方案,我通过这个解决方案获得了布尔值相机访问块状态。

import android.Manifest
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.app.AppOpsManager
import android.content.Context
import android.os.Build
import android.os.Process
import androidx.annotation.RestrictTo
import androidx.core.app.AppOpsManagerCompat

@TargetApi(Build.VERSION_CODES.S)
@RestrictTo(RestrictTo.Scope.LIBRARY)
object SensorPrivacyCheck {
    fun isMicrophoneBlocked(): Boolean {
        return checkIsPrivacyToggled(AppOpsManager.OPSTR_RECORD_AUDIO)
    }

    fun isCameraBlocked(): Boolean {
        return checkIsPrivacyToggled(AppOpsManager.OPSTR_CAMERA)
    }

    @SuppressLint("PrivateApi", "BlockedPrivateApi")
    private fun checkIsPrivacyToggled(opStr: String): Boolean {
        val appOpsManager: AppOpsManager =
            ApplicationContext.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
        try {
            val mode = appOpsManager.unsafeCheckOpNoThrow(
                opStr,
                Process.myUid(),
                ApplicationContext.packageName
            )
            return mode != AppOpsManager.MODE_ALLOWED
        } catch (e: Throwable) {
            e.printStackTrace()
        }
        return false
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.