2013-05-17 6 views
1

Я хочу, чтобы проверить, если источник звука из voice_call доступен:Как проверить, доступен ли MediaRecorder.AudioSource.VOICE_CALL?

MediaRecorder.AudioSource.VOICE_CALL 

Как проверить, могу ли я записывать телефонные звонки, так как некоторые программно устройство не позволяет это?

благодарит заранее.

Коби

ответ

0

Я думаю, что вы можете использовать MediaRecorder.AudioSource.MIC вместо этого.

1

Способ проверки заключается в том, чтобы попытаться записать и поймать исключение. Никто не понял какой-либо другой способ узнать заранее, будет ли устройство работать или нет. Если вы поймаете исключение, вы можете попробовать начать запись с MediaRecorder.AudioSource.MIC. Если динамик телефона низкий, вы обнаружите, что будет записан только владелец телефона, а другая сторона на линии не будет, но это лучшее, что вы можете сделать.

Я не видел список моделей телефонов, у которых эти функции отключены. Конечно, это был бы удобный список.

+0

Где я должен попробовать/поймать исключение? мне нужно обернуть 'MediaRecorder.setAudioSource()', 'MediaRecorder.prepare()', 'MediaRecorder.start()' или все из них? – ocramot

+0

Если бы вы это разрешили. Я застрял в этом, где вы могли бы помочь мне, пожалуйста. –

0

Я сделал этот процесс: Я пытаюсь создать файл в блоке try/catch в той форме, которую я хочу, на стартовом и стоповом рекордере, все идет хорошо, оно работает с выбранным аудиоистором.

public class sRecAudioMic extends Service { 

DecimalFormat fCoordenadas = new DecimalFormat("##.00000000"); 
DecimalFormat fVelocidade = new DecimalFormat("##.0"); 
static String imei = ""; 

private static String FORMATO_AUDIO = ".aac"; 
static String AUDIO_RECORDER_FOLDER = ""; 
static String codigo_usuario = ""; 

int contSegundos = 0; 

static MediaRecorder recorder; 

Boolean cancelTask = false; 

eChamada chamada; 

Context context; 

public sRecAudioMic() { 
} 



@Override 
public IBinder onBind(Intent intent) { 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onCreate() { 
    imei = Functions.getIMEI(sRecAudioMic.this); 

    AUDIO_RECORDER_FOLDER = new _Path().getPathAudio(); 
} 

@SuppressLint("InlinedApi") 
@Override 
public void onStart(Intent intent, int startId) { 

    try 
    { 
     Bundle b = intent.getExtras(); 
     chamada = (eChamada) b.getSerializable("Chamada"); 

     //chamada = (eChamada) intent.getParcelableExtra("Chamada"); 
     String t = ""; 
     t = " "; 
    } 
    catch(Exception e) 
    { 
     String t = ""; 

     t = " "; 
    }  

    String nomeArquivo = ""; 

    int cont = 0; 

    Calendar lCDateTime = Calendar.getInstance(); 

    String t = String.valueOf(lCDateTime.getTimeInMillis()); 

    nomeArquivo = "recording_" + t + FORMATO_AUDIO; 

    nomeArquivo = nomeArquivo.replace(" ", "_").replace(":", "_") 
      .replace("-", "_"); 

    String caminhoArquivo = AUDIO_RECORDER_FOLDER + "/" + nomeArquivo; 

    chamada.nomeArquivo = nomeArquivo; 
    chamada.caminhoArquivo = caminhoArquivo; 

    try { 

     recorder = new MediaRecorder(); 

     try { 

      MediaRecorder r = new MediaRecorder(); 
      r.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
      r.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
      r.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
      r.setOutputFile(caminhoArquivo); 
      r.setAudioSamplingRate(96000); 
      r.prepare(); 
      r.start(); 
      r.stop(); 
      r.reset(); 
      r.release(); 

      r = null; 

      recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 

     } catch (Exception e) { 

      MediaRecorder r = new MediaRecorder(); 
      r.setAudioSource(MediaRecorder.AudioSource.MIC); 
      r.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
      r.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
      r.setOutputFile(caminhoArquivo); 
      r.setAudioSamplingRate(96000); 
      r.prepare(); 
      r.start(); 
      r.stop(); 
      r.reset(); 

      r = null; 

      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     } 

     recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
     recorder.setAudioSamplingRate(96000); 
     // recorder.setMaxDuration(30000); 

     recorder.setOutputFile(caminhoArquivo); 

     recorder.setOnErrorListener(errorListener); 
     recorder.setOnInfoListener(infoListener); 

     recorder.prepare(); 
     recorder.start(); 

    } catch (Exception e) { 
     e.printStackTrace(); 

     new LOG().CriaLog("sRecAudioMic", "onStart()", e.getMessage(), ""); 

    } finally { 

    } 

} 

@Override 
public void onDestroy() { 

    String time = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss") 
      .format(new java.util.Date()); 

    if (null != recorder) { 

     // para gravacao 
     recorder.stop(); 
     recorder.reset(); 
     recorder.release(); 

     recorder = null; 
    } 

    chamada.timestampChamadaTerminada = time; 

    ChamadasDataSource dsCham = new ChamadasDataSource(sRecAudioMic.this); 

    dsCham.open(); 

    dsCham.insert(chamada); 

    dsCham.close(); 

} 

@SuppressLint("NewApi") 
private MediaRecorder.OnErrorListener errorListener = new MediaRecorder.OnErrorListener() { 
    @Override 
    public void onError(MediaRecorder mr, int what, int extra) { 

    } 
}; 

@SuppressLint("NewApi") 
private MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() { 
    @Override 
    public void onInfo(MediaRecorder mr, int what, int extra) { 

    } 
}; 

}

Смежные вопросы