Android系统。错误6.0中的AudioAttributes的捕获存在4无效

时间:2016-08-11 06:36:52

标签: android audiorecord

朋友您好我正在使用来电录音机。音频录制成功在下面的版本(我已尝试在三星galaxy s3),但当我在6.0版本中尝试它时,它给我错误 E / AudioAttributes:AudioAttributes的无效捕获预设4。

我搜索了很多,但没有找到确切的答案。在我用来录制AudioSource.Voice_call时,android中有一个错误,它给了我错误。

提前致谢。如果有任何解决方案可以记录6.0中的来电,请解决我的问题。请告诉我任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

很长一段时间后我得到了答案。这是由于制造问题。在许多国家禁止通话记录。所以制造商不允许记录上行链路和下行链路。有一种方法可以打开麦克风并录制它。这是最简单的方法。

答案 1 :(得分:1)

您需要使用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);
    }
}

有一个库和一个使用https://github.com/ViktorDegtyarev/CallRecLib

的例子