You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 10(API29) Kotlin开发:MicrophoneInfo实例化报错及灵敏度获取问题

解决MicrophoneInfo实例化错误并获取麦克风灵敏度的方法

你遇到的错误是因为MicrophoneInfo的构造方法是包私有,无法直接通过new关键字实例化。要获取麦克风信息,必须通过系统提供的AudioManager服务来获取麦克风列表,而不是手动创建对象。

正确实现步骤

  • 获取AudioManager系统服务实例
  • 调用AudioManager.getMicrophones()获取设备上所有麦克风的List<MicrophoneInfo>
  • 从列表中选取目标麦克风(通常取第一个即可,多麦克风设备可按需筛选)
  • 调用getSensitivity()获取该麦克风的dBFS灵敏度值

修改后的完整代码

import android.media.AudioManager
import android.media.MicrophoneInfo
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import br.com.kyloren.soundchecker.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private var noiseValue: Float? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        supportActionBar?.hide()

        // 获取AudioManager服务
        val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
        // 获取麦克风列表
        val microphones = audioManager.microphones
        // 检查是否有可用麦克风
        if (microphones.isNotEmpty()) {
            val myMicrophone = microphones[0]
            // 获取灵敏度(dBFS)
            noiseValue = myMicrophone.sensitivity
            // 这里可以使用noiseValue做后续处理,比如打印或显示
            noiseValue?.let {
                println("麦克风灵敏度:${it} dBFS")
            }
        }
    }
}

注意事项

  • 确保你的应用已申请RECORD_AUDIO权限,在AndroidManifest.xml中添加:
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
  • 在Android 10及以上版本,还需要动态申请该权限,否则无法正常获取麦克风信息。

内容的提问来源于stack exchange,提问作者Bruno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:47:17