web-dev-qa-db-fra.com

Enregistrement d'appel Android La voix entrante n'est pas enregistrée

Je travaille dans l'application d'enregistrement d'appels automatique, je peux enregistrer un appel vocal sous Android 6 à l'aide de MediaRecorder.AudioSource.VOICE_CALL, Sous Android 6, il est impossible d'enregistrer un appel vocal à l'aide de VOICE_CALL. J'ai réussi à enregistrer en utilisant MediaRecorder.AudioSource.MIC, mais la voix entrante n'est pas enregistrée et je souhaite enregistrer un appel vocal en mode normal, pas en mode haut-parleur activé. S'il vous plaît aidez-moi sur ce point. (J'avais essayé Xiomi Redmi 4a (Android 6), ne fonctionnait pas).

 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);

Edit: Il n'y a pas de problème avec les autorisations. 

Update: tout le monde sait comment forcer un autre flux vers une source audio MIC. Cela nécessite du code Android natif. Aidez-moi s'il vous plaît sur ceRéférez-vous à cette question pour plus de détails sur le routage audio

21
Bharath Kumar

Vous devez utiliser ndk. Voici des exemples de fonctions à effectuer.

Charger libmedia.so et 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;}

Jeu de fonctionsParamètres

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;}

Tâche 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);
    }
}

Il existe une bibliothèque et un exemple d'utilisation https://github.com/ViktorDegtyarev/CallRecLib

11
Viktor Degtyarev

Les périphériques Xiaomi ont toujours des problèmes de demandes d’autorisation, même lors de l’exécution ou de l’installation.

J'ai un Xiaomi Redmi 3 pro et force toujours à refuser une autorisation lorsque j'installe des applications. Je dois donc manuellement l'autoriser . Si votre problème est identique, j'ai trouvé une solution de contournement et cela a fonctionné pour moi: Comment obtenir l'autorisation de démarrage automatique de l'application MIUI Security par programme?

2
nhoxbypass

Cela pourrait être un problème lié à l'autorisation. 

Avec l'introduction d'Android 6.0 Marshmallow, aucune autorisation ne sera accordée à l'application au moment de l'installation. Au lieu de cela, l'application doit demander à l'utilisateur une autorisation une par une au moment de l'exécution.

J'espère que vous avez inclus le code qui demande explicitement des autorisations sur les appareils avec Marshmallow et les versions ultérieures.

1
Mukesh Sharma

Dans l’appel d’appel automatique (callU), sélectionnez l’option "SoundFX" si Enable Record Call Two Side

Lien

 enter image description here

1
pere plop

essayer 

 MediaRecorder.AudioSource.VOICE_COMMUNICATION

et voir 

https://androidforums.com/threads/Android-phone-with-call-recording-function.181663/

0
user8256287