una smart samsung pie llamadas llamada grabar grabador como aplicaciones android alsa android-mediarecorder android-audiorecord android-rom

android - samsung - grabar llamadas huawei p smart



GrabaciĆ³n de llamadas: haga que funcione en Nexus 5X(posibilidad de enraizamiento o ROM personalizada) (1)

No estoy seguro de si se trata de un problema específico de Nexus 5, pero generalmente la clase utilizada para grabar llamadas es MediaRecorder . ¿Ha intentado reemplazar AudioRecorder por un MediaRecorder ?

Basado en this pregunta de desbordamiento de pila, creo que puedes probar el siguiente código basado en la publicación del blog de Ben :

import android.media.MediaRecorder; import android.os.Environment; import java.io.File; import java.io.IOException; public class CallRecorder { final MediaRecorder recorder = new MediaRecorder(); final String path; /** * Creates a new audio recording at the given path (relative to root of SD card). */ public CallRecorder(String path) { this.path = sanitizePath(path); } private String sanitizePath(String path) { if (!path.startsWith("/")) { path = "/" + path; } if (!path.contains(".")) { path += ".3gp"; } return Environment.getExternalStorageDirectory().getAbsolutePath() + path; } /** * Starts a new recording. */ public void start() throws IOException { String state = android.os.Environment.getExternalStorageState(); if(!state.equals(android.os.Environment.MEDIA_MOUNTED)) { throw new IOException("SD Card is not mounted. It is " + state + "."); } // make sure the directory we plan to store the recording in exists File directory = new File(path).getParentFile(); if (!directory.exists() && !directory.mkdirs()) { throw new IOException("Path to file could not be created."); } recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(path); recorder.prepare(); recorder.start(); } /** * Stops a recording that has been previously started. */ public void stop() throws IOException { recorder.stop(); recorder.release(); } }

En este ejemplo, he usado MediaRecorder.AudioSource.VOICE_CALL pero puede probar otras opciones como MediaRecorder.AudioSource.VOICE_COMMUNICATION y también el micrófono solo para ver si hay problemas de hardware en su teléfono.

Estoy intentando usar AudioRecord con AudioRecord en Nexus 5X, Android 7.1 (mi propia compilación de AOSP).

Ya he pasado la etapa de permisos: moví mi APK a aplicaciones privilegiadas, hice un ajuste a AudioRecord en la fuente de Android para dejar de lanzar una excepción sobre esta fuente.

Ahora estoy vaciando los buffers de grabación durante una llamada telefónica.

Sé que hay muchas aplicaciones de grabación de llamadas y funcionan en otros dispositivos. También he visto ciertas aplicaciones que pueden realizar algunos trucos en un N5 arraigado y hacer que funcione.

Deseo lograr lo mismo en Nexus 5X: CUALQUIER ajuste está bien para mí, incluido el cambio de la versión de Android, la modificación de los controladores de Qualcomm, los archivos de configuración del dispositivo, etc., básicamente todo lo que se puede lograr en una ROM personalizada.

He intentado perder el tiempo con el código de la plataforma: hardware / qcom / audio / hal / voice.c, especialmente la función voice_check_and_set_incall_rec_usecase , pero hasta ahora no tenía sentido.

También verifiqué device / lge / bullhead / mixer_paths.xml, encontré que hay una sección relacionada con la grabación de llamadas:

<!-- Incall Recording --> <ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" /> <ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" /> <ctl name="MultiMedia8 Mixer VOC_REC_UL" value="0" /> <ctl name="MultiMedia8 Mixer VOC_REC_DL" value="0" /> <!-- Incall Recording End -->

Pero tampoco pude entenderlo o cómo se puede ayudar.