Android VOICE_CALL,过时的音频源。
创始人
2024-08-19 05:00:23
0

在Android中,使用VOICE_CALL音频源已经被标记为过时的,推荐使用更适合的音频源。以下是一个示例解决方法,可以使用VOICE_COMMUNICATION音频源替代VOICE_CALL音频源。

import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    private AudioTrack audioTrack;
    private int bufferSize;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取音频缓冲区大小
        bufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);

        // 创建AudioTrack对象
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
                    .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
                    .build();
            AudioFormat audioFormat = new AudioFormat.Builder()
                    .setSampleRate(44100)
                    .setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
                    .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                    .build();
            audioTrack = new AudioTrack(audioAttributes, audioFormat, bufferSize, AudioTrack.MODE_STREAM, AudioManager.AUDIO_SESSION_ID_GENERATE);
        } else {
            audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
        }

        // 开始播放音频
        audioTrack.play();
        Log.d(TAG, "AudioTrack started");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 停止播放音频并释放资源
        if (audioTrack != null) {
            audioTrack.stop();
            audioTrack.release();
            audioTrack = null;
        }
        Log.d(TAG, "AudioTrack released");
    }
}

上述代码中,通过AudioAttributesAudioFormat的方式创建AudioTrack对象,并设置适当的音频使用和内容类型。如果运行的设备的Android版本低于Oreo (API Level 26),则继续使用STREAM_VOICE_CALL音频源创建AudioTrack对象。在onCreate()方法中,调用play()方法开始播放音频。在onDestroy()方法中,调用stop()方法停止播放音频并释放资源。

请注意,在使用VOICE_COMMUNICATION音频源时,需要在AndroidManifest.xml文件中添加以下权限:



此外,还需要动态请求录音权限。

以上示例代码仅提供了一个基本的解决方法,具体的实现可能因应用的需求而有所不同。

相关内容

热门资讯

推荐一款!德州数据辅助器,微扑... 推荐一款!德州数据辅助器,微扑克全自动机器人,技巧教程(确实是真的有挂)微扑克全自动机器人辅助器中分...
盘点一款!智星德州菠萝有人机吗... 盘点一款!智星德州菠萝有人机吗,智星德州菠萝外挂,必赢教程(原先是有挂);小薇(透视辅助)致您一封信...
重大通报!wpk辅助透视,wp... 重大通报!wpk辅助透视,wpk辅助挂,2025新版教程(最初真的是有挂)是一款可以让一直输的玩家,...
让我来分享经验!来玩app辅助... 让我来分享经验!来玩app辅助,aapoker透明挂,详细教程(果然真的有挂)1)aapoker透明...
揭秘真相!poker软件免费吗... 揭秘真相!poker软件免费吗,微扑克辅助挂,可靠技巧(原生有挂)1、微扑克辅助挂ai机器人多个强度...
技巧知识分享!德州wpk,德扑... 技巧知识分享!德州wpk,德扑ai智能,玩家教你(都是有挂)1.德扑ai智能 ai辅助创建新账号,点...
记者揭秘!aapoker发牌逻... 记者揭秘!aapoker发牌逻辑,微扑克辅助挂,安装教程(一向是真的有挂)是一款可以让一直输的玩家,...
秘笈分析!wpk ai机器人,... 秘笈分析!wpk ai机器人,wepoke辅助德之星,插件教程(原生真的有挂)1、金币登录送、破产送...
玩家亲测!德扑ai智能系统,德... 自定义德扑ai智能系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是...
三分钟了解!aapoker能玩... 三分钟了解!aapoker能玩吗,wepoke一定有挂,软件教程(原生存在有挂)1、在wepoke一...