900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android电话录音没有声音 Android通话录音未录制来电语音(示例代码)

android电话录音没有声音 Android通话录音未录制来电语音(示例代码)

时间:2022-12-26 01:07:47

相关推荐

android电话录音没有声音 Android通话录音未录制来电语音(示例代码)

我正在使用自动呼叫记录器应用程序,我能够使用MediaRecorder.AudioSource.VOICE_CALL在android 6下方录制语音呼叫,从android 6无法使用VOICE_CALL录制语音呼叫。我设法使用MediaRecorder.AudioSource.MIC进行录音,但这里传入的声音没有录制,我想在正常模式下录制语音通话,而不是在扬声器模式下录制。请帮帮我。 (我曾尝试过Xiomi Redmi 4a(机器人6),没有工作)。

myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

myRecorder.setMaxDuration(60 * 60 * 1000);

AudioManager audiomanager =

(AudioManager)getSystemService(AUDIO_SERVICE);

audiomanager.setMode(2);

编辑:权限没有问题。

答案

你需要使用ndk。以下是需要完成的功能示例。

加载libmedia.so和libutils.so

int load(JNIEnv *env, jobject thiz) {

void *handleLibMedia;

void *handleLibUtils;

int result = -1;

lspr func = NULL;

pthread_t newthread = (pthread_t) thiz;

handleLibMedia = dlopen("libmedia.so", RTLD_NOW | RTLD_GLOBAL);

if (handleLibMedia != NULL) {

func = dlsym(handleLibMedia, "_ZN7android11AudioSystem13setParametersEiRKNS_7String8E");

if (func != NULL) {

result = 0;

}

audioSetParameters = (lasp) func;

} else {

result = -1;

}

handleLibUtils = dlopen("libutils.so", RTLD_NOW | RTLD_GLOBAL);

if (handleLibUtils != NULL) {

fstr = dlsym(handleLibUtils, "_ZN7android7String8C2EPKc");

if (fstr == NULL) {

result = -1;

}

} else {

result = -1;

}

cmd = CM_D;

int resultTh = pthread_create(&newthread, NULL, taskAudioSetParam, NULL);

return result;}

函数setParameters

int setParam(jint i, jint as) {

pthread_mutex_lock(&mt);

audioSession = (int) (as + 1);

kvp = "input_source=4";

kvps = toString8(kvp);

cmd = (int) i;

pthread_cond_signal(&cnd);

pthread_mutex_unlock(&mt);

return 0;}

任务AudioSetParameters

void *taskAudioSetParam(void *threadid) {

while (1) {

pthread_mutex_lock(&mt);

if (cmd == CM_D) {

pthread_cond_wait(&cnd, &mt);

} else if (audioSetParameters != NULL) {

audioSetParameters(audioSession, kvps);

}

pthread_mutex_unlock(&mt);

}

}

另一答案

首先,如果设备位于Marshmallow之上,则Manifest需要这3个权限以及运行时权限请求,

所有手机都不支持MediaRecorder.AudioSource.VOICE_CALL,所以你需要继续使用MediaRecorder.AudioSource.MIC。

我使用它并在大多数设备上正常工作,

recorder = new MediaRecorder();

recorder.setAudioSource(audioSource);

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

recorder.setOutputFile(your_path);

您需要将其设置为正确记录您的呼叫,

audioManager.setMode(AudioManager.MODE_IN_CALL);

当你开始录制audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), 0);时提高音量

停止录制时将模式设置为正常,audioManager.setMode(AudioManager.MODE_NORMAL);并将流量设置为后退状态。

另一答案

小米设备即使在运行时或安装时也始终存在权限请求问题。

我有一个小米Redmi 3专业版,当我安装应用程序时它总是强制拒绝一些权限,所以我必须手动允许它。如果你的问题是一样的,我找到了一些解决方案,它对我有用:How to get MIUI Security app auto start permission programmatically?

另一答案

这可能是与权限相关的问题。

随着Android 6.0 Marshmallow的推出,该应用程序将不会在安装时被授予任何权限。相反,应用程序必须在运行时逐个询问用户权限。

我希望你已经包含明确要求Marshmallow及以上设备的权限的代码。

另一答案

在自动呼叫记录器(callU)中有一个选项“SoundFX”如果启用记录呼叫双方

另一答案

尝试

MediaRecorder.AudioSource.VOICE_COMMUNICATION

并看到

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。