android10版本中使用MediaRecorder通话过程中录音时无声音,挂断电话后录制的声音正常,在低版本正常

wuhongyao3 2020-10-14 04:45:29
android10版本中使用MediaRecorder通话过程中录音时无声音,挂断电话后录制的声音正常,在低版本都正常,使用不同品牌手机测试都是一样问题,哪位大神知道原因的话说下,谢谢!

录音代码如下:

MediaRecorder mMediaRecorder;
File mRecorderFile;
long startRecorderTime,stopRecorderTime;
Handler mHander;
public boolean doStart() {

try {
//创建MediaRecorder
mMediaRecorder = new MediaRecorder();
//创建录音文件
mRecorderFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/recorderdemo/" + System.currentTimeMillis() + ".mp4");
if (!mRecorderFile.getParentFile().exists()) mRecorderFile.getParentFile().mkdirs();
mRecorderFile.createNewFile();


//配置MediaRecorder

//从麦克风采集
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

//保存文件为MP4格式
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

//所有android系统都支持的适中采样的频率
mMediaRecorder.setAudioSamplingRate(44100);

//通用的AAC编码格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

//设置音质频率
mMediaRecorder.setAudioEncodingBitRate(96000);

//设置文件录音的位置
mMediaRecorder.setOutputFile(mRecorderFile.getAbsolutePath());


//开始录音
mMediaRecorder.prepare();
mMediaRecorder.start();
startRecorderTime = System.currentTimeMillis();

} catch (Exception e) {
//Toast.makeText(MediaRecordActivity.this, "录音失败,请重试", Toast.LENGTH_SHORT).show();
return false;
}


//记录开始录音时间,用于统计时长,小于3秒中,录音不发送

return true;
}

/**
* 关闭录音
*
* @return
*/
public boolean doStop() {
try {
mMediaRecorder.stop();
stopRecorderTime = System.currentTimeMillis();
final int second = (int) (stopRecorderTime - startRecorderTime) / 1000;
//按住时间小于3秒钟,算作录取失败,不进行发送
if (second < 3) return false;
mHander.post(new Runnable() {
@Override
public void run() {
//tv_sendmsg.setText("录制成功:" + second + "秒");
}
});

} catch (Exception e) {
e.printStackTrace();
}
return true;
}
...全文
62052 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
请发表友善的回复…
发表回复

大佬最后解决了吗?

  • 打赏
  • 举报
回复
qq_35277337 入门 2021-09-09

楼主后面有没有解决此问题

  • 打赏
  • 举报
回复
绝对不嚣张 2020-12-30
我这边也碰到这个问题了,用AudioRecord录制的,切到其他应用后,息屏过大概1分钟,录制的pcm数据就全为0了,切换回自己的应用录制立马正常了
  • 打赏
  • 举报
回复
wuhongyao3 2020-12-30
引用 15 楼 qq_24905017 的回复:
所以兄弟你解决这个问题了吗?我也被卡住了。。。感觉就好像系统通话强制占用了麦克风通道一样
没有解决哦,你那边有思路啊,这边我们暂时放下处理其他事情了。
  • 打赏
  • 举报
回复
qq_24905017 2020-12-27
所以兄弟你解决这个问题了吗?我也被卡住了。。。感觉就好像系统通话强制占用了麦克风通道一样
  • 打赏
  • 举报
回复
KingGourod 2020-12-02
引用 13 楼 wuhongyao3 的回复:
[quote=引用 12 楼 KingGourod 的回复:][quote=引用 9 楼 wuhongyao3 的回复:]6楼打字错误

问题没有解决,采用无障碍服务方式录音,在进行通话录音时一样没有声音。但是下载了一个app,同样采用的无障碍服务录制的声音正常。上述代码可以帮忙分析下是否正确。

这里并不会获取到来电的监听 也就是说在手机来电时候 onAccessibilityEvent 这个方法并不会回调[/quote]

测试时候,当呼叫时录音文件产生了,代表应该调用了相关的监听事件。[/quote]
这时候开启一个前台通知我看了官方的说法就是!无障碍+普通应用的时候 要将应用处于顶层 或者顶层是图才能获取到音频 不然就会被静默处理
  • 打赏
  • 举报
回复
wuhongyao3 2020-12-01
引用 12 楼 KingGourod 的回复:
[quote=引用 9 楼 wuhongyao3 的回复:]6楼打字错误 问题没有解决,采用无障碍服务方式录音,在进行通话录音时一样没有声音。但是下载了一个app,同样采用的无障碍服务录制的声音正常。上述代码可以帮忙分析下是否正确。
这里并不会获取到来电的监听 也就是说在手机来电时候 onAccessibilityEvent 这个方法并不会回调[/quote] 测试时候,当呼叫时录音文件产生了,代表应该调用了相关的监听事件。
  • 打赏
  • 举报
回复
KingGourod 2020-11-29
引用 9 楼 wuhongyao3 的回复:
6楼打字错误

问题没有解决,采用无障碍服务方式录音,在进行通话录音时一样没有声音。但是下载了一个app,同样采用的无障碍服务录制的声音正常。上述代码可以帮忙分析下是否正确。

这里并不会获取到来电的监听 也就是说在手机来电时候 onAccessibilityEvent 这个方法并不会回调
  • 打赏
  • 举报
回复
Jing丶無雙 2020-11-25
你可以使用AudioRecord来录音试试,参考链接:https://my.oschina.net/u/816576/blog/535848
  • 打赏
  • 举报
回复
wuhongyao3 2020-11-23
6楼打字错误 问题没有解决,采用无障碍服务方式录音,在进行通话录音时一样没有声音。但是下载了一个app,同样采用的无障碍服务录制的声音正常。上述代码可以帮忙分析下是否正确。
  • 打赏
  • 举报
回复
wuhongyao3 2020-11-21
现在把代码贴出来,大家可以分析下是否我写的有问题


public class MyAccessibilityService extends AccessibilityService {

    MediaRecorderHelper mediaHelper ;
    AudioRecordManager recorderUtils2;
    ExtAudioRecorder recorderUtils;

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

        String packageName = event.getPackageName().toString();
        if (!packageName.equals("com.why.myrecord")) {
            return;
        }
        CharSequence className = event.getClassName();
        if (className.equals("com.why.myrecord.MainActivity")) {
            TelephonyManager tm=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            tm.listen(new Mylistener(), PhoneStateListener.LISTEN_CALL_STATE);//这是电话状态的监听器实例
        }
    }

    @Override
    public void onInterrupt() {

    }

    class Mylistener extends PhoneStateListener
    {

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {//state 电话的状态,incomingNumber是来电的电话号码
            // TODO Auto-generated method stub



            switch (state) {
                case TelephonyManager.CALL_STATE_IDLE://空闲状态
                    System.out.println("it is free!");
                    //AddLog("it is free!");
                    if(mediaHelper!=null)
                    {
                        mediaHelper.doStop();
                    }
                    if(recorderUtils !=null)
                    {
                        recorderUtils.stopRecording();
                    }
                    break;
                case TelephonyManager.CALL_STATE_RINGING://  铃响状态
                    System.out.println("it is ringing!");
                    AddLog("it is ringing!");
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    System.out.println("it is speaking!");//  通话中的状态

                     if(mediaHelper==null)
                {
                    mediaHelper = new MediaRecorderHelper();
                    mediaHelper.doStart();
                }
                    break;
                default:
                    break;
            }



            super.onCallStateChanged(state, incomingNumber);
        }

    

    }
}
  • 打赏
  • 举报
回复
wuhongyao3 2020-11-21
问题没有解决,采用无障碍服务方式录音,产生的录音文件在通话过程中一样没有录音。
  • 打赏
  • 举报
回复
udbpgym 2020-11-19
楼主现在解决了吗?有办法实现吗
  • 打赏
  • 举报
回复
acqjcc 2020-11-17
引用 4 楼 wuhongyao3 的回复:
经过查找资料 AndroidQ电话录音静音问题及解决方案 发现有资料显示 唯一方案就是:Accessibility service + ordinary app (采用无障碍服务的方式) 现在需要测试。
你好 请问这个问题你解决了吗 我也遇到了同样的问题 有代码可以借鉴学习一下吗
  • 打赏
  • 举报
回复
wuhongyao3 2020-10-20
经过查找资料 AndroidQ电话录音静音问题及解决方案 发现有资料显示 唯一方案就是:Accessibility service + ordinary app (采用无障碍服务的方式) 现在需要测试。
  • 打赏
  • 举报
回复
不会写代码的猴子 版主 2020-10-19
MediaRecorder.AudioSource.MIC参数说明 其中第一个参数就是选择录音源的,其可选参数如下: MediaRecorder.AudioSource.CAMCORDER 设定录音来源于同方向的相机麦克风相同,若相机无内置相机或无法识别,则使用预设的麦克风 MediaRecorder.AudioSource.DEFAULT 默认音频源 MediaRecorder.AudioSource.MIC 设定录音来源为主麦克风。 MediaRecorder.AudioSource.VOICE_CALL 设定录音来源为语音拨出的语音与对方说话的声音 MediaRecorder.AudioSource.VOICE_COMMUNICATION 摄像头旁边的麦克风 MediaRecorder.AudioSource.VOICE_DOWNLINK 下行声音 MediaRecorder.AudioSource.VOICE_RECOGNITION 语音识别 MediaRecorder.AudioSource.VOICE_UPLINK 上行声音
  • 打赏
  • 举报
回复
王半仙 2020-10-17
有的设备在处理音频时用的的共享内存方案,这时候事能取到数据,有的设备录音通道没法共用。这个需要和Mic及ROM间的通信方式决定的。
  • 打赏
  • 举报
回复
wuhongyao3 2020-10-14
哪位大神给个思路。
  • 打赏
  • 举报
回复
相关推荐
发帖
Android
加入

7.9w+

社区成员

移动平台 Android
社区管理员
  • Android
  • wresource
  • 帅次
申请成为版主
帖子事件
创建了帖子
2020-10-14 04:45
社区公告
暂无公告