android获取通话记录




Android通话记录传入的语音没有被记录 (4)

你需要使用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

我正在使用自动通话记录器应用程序,我可以使用MediaRecorder.AudioSource.VOICE_CALL在Android 6下记录语音通话,从Android 6无法使用VOICE_CALL记录语音通话。 我设法使用MediaRecorder.AudioSource.MIC进行录制,但是这里传入的语音没有被录制,我想以正常模式录制语音呼叫而不是在扬声器模式下。 请帮助我。 (我曾尝试过Xiomi Redmi 4a(android 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);

编辑:权限没有问题。

更新:任何人都知道如何强制另一个流到MIC音频源。 这需要原生的android代码。 请帮我 参考这个问题的路由音频的更多细节


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

链接



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

随着Android 6.0棉花糖的推出,该应用程序将不会在安装时获得任何许可。 相反,应用程序必须在运行时逐一询问用户的权限。

我希望你已经包括明确要求棉花糖和以上设备的权限的代码。





phone-call