2012-07-31 6 views
2

Le MediaRecorder fonctionne sur d'autres versions d'Android mais pas sur 2.3.3:Android MediaRecorder - Échec Démarrer: -2147483648 sur 2.3.3

try { 

    MediaRecorder mRecorder = new MediaRecorder(); 
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    mRecorder.setOutputFile(path + "r_" + FileName); 

    int version = android.os.Build.VERSION.SDK_INT; 
    Log.d("MP3Downloader", "V: " + version); 

    if(version >= 8) { 
     mRecorder.setAudioEncodingBitRate(16); 
     mRecorder.setAudioSamplingRate(44100); 
     mRecorder.setAudioChannels(2); 
    } 

    mRecorder.prepare(); 
    mRecorder.start(); 
} catch (Exception e) { 
    Log.e("MP3Downloader", "MediaRecorder Failed: " + e.getMessage()); 
} 

J'obtiens l'erreur a échoué Démarrer: -2147483648 sur la version 2.3.3 seulement. Je n'ai pas trouvé ce problème ailleurs.

J'ai aussi essayé:

try { 

    MediaRecorder mRecorder = new MediaRecorder(); 
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

    FileOutputStream fos = new FileOutputStream("r_" + FileName); 

    mRecorder.setOutputFile(fos.getFD()); 



    int version = android.os.Build.VERSION.SDK_INT; 
    Log.d("MP3Downloader", "V: " + version); 

    if(version >= 8) { 
     mRecorder.setAudioEncodingBitRate(16); 
     mRecorder.setAudioSamplingRate(44100); 
     mRecorder.setAudioChannels(1); 
    } 

    mRecorder.prepare(); 
    mRecorder.start(); 
} catch (Exception e) { 
    Log.e("MP3Downloader", "MediaRecorder Failed: " + e.getMessage()); 
} 

Mais, je me exception: "(lecture seule système de fichiers)"

Je autorisations:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
+2

Le problème je crois était d'utiliser plusieurs instances de l'objet MediaRecorder ... qui était dans une méthode qui serait appelée plusieurs fois et à chaque fois il réattribuerait mRecorder à une nouvelle instance d'un MediaRecorder. Je suppose que l'OS/Garbage Collector/Watchdog s'occupait des anciens objets MediaRecorder sur la plupart des autres versions d'Android, mais 2.3.3 n'aimait pas mes mauvaises habitudes de programmation ... Je l'ai réparé soit en réutilisant la même instance du MediaRecorder selon le schéma à http://developer.android.com/reference/android/media/MediaRecorder.html –

+1

Votre commentaire m'a redonné espoir .. J'ai le même problème et ça me rend fou! Nous ferons un essai et si cela fonctionne fera certainement quelques upvoting ici et là :). BTW développeurs Android. pourrait mettre leur acte ensemble et documenter ce genre de choses mieux que pour le moment ce n'est rien de ridicule – spirytus

Répondre

0

modifier le format de sortie avec 3gpp.