1

我正在开发一个与软电话集成的应用程序,因此我试图在检测到来电时播放手机的默认铃声。我遇到的问题是,当我将一些 AirPods 连接到我的 Pixel 3 时,铃声会通过手机和 AirPods 播放。来自手机的声音由响铃音量控制,而来自 AirPods 的声音由媒体音量控制。AirPods 设置用于通话和媒体音频。

我已经尝试了两种不同的方法,但最终都得到了相同的结果。首先,我尝试使用 MediaPlayer 实例并将 AudioAttributes 设置为 AudioAttributes.USAGE_NOTIFICATION_RINGTONE:

    val uri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE)
    val mp = MediaPlayer().also {
        it.setAudioAttributes(AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
            .build())
        it.setDataSource(this, uri)
        it.prepare()
    }

    findViewById<AppCompatButton>(R.id.start).also { button ->
        button.setOnClickListener {
            mp.isLooping = true
            mp.start()
        }
    }

    findViewById<AppCompatButton>(R.id.stop).also { button ->
        button.setOnClickListener {
            mp.stop()
        }
    }

我也尝试过使用 RingtoneManager.getRinger() 方法:

    val uri = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE)
    val ringer = RingtoneManager.getRingtone(this, uri)

    findViewById<AppCompatButton>(R.id.start).also { button ->
        button.setOnClickListener {
            ringer.play()
        }
    }

    findViewById<AppCompatButton>(R.id.stop).also { button ->
        button.setOnClickListener {
            ringer.stop()
        }
    }

这两种方法都产生相同的结果,所以我不确定从这里去哪里。我想得到它,以便使用铃声音量通过连接的蓝牙设备播放铃声,类似于运营商呼叫的方式。

4

0 回答 0