Je veux utiliser Mediarecorder pour enregistrer la voix, mon code est le suivant:
02-01 13:56:51.094: E/AudioRecorderDemoActivity(1397): Failed to record() 02-01 13:56:51.094: E/AudioRecorderDemoActivity(1397): java.io.IOException: prepare failed. 02-01 13:56:51.094: E/AudioRecorderDemoActivity(1397): at android.media.MediaRecorder._prepare(Native Method) 02-01 13:56:51.094: E/AudioRecorderDemoActivity(1397): at android.media.MediaRecorder.prepare(MediaRecorder.java:524) 02-01 13:56:51.094: E/AudioRecorderDemoActivity(1397): at com.marakana.android.audiorecorderdemo.AudioRecorderDemoActivity.record(AudioRecorderDemoActivity.java:69) 02-01 14:05:20.074: E/AndroidRuntime(1790): FATAL EXCEPTION: main 02-01 14:05:20.074: E/AndroidRuntime(1790): java.lang.IllegalStateException: Could not execute method of the activity
6 Réponses :
Tout d'abord, votre code a l'air bien. Avez-vous ajouté les autorisations requises sur votre fichier manifeste? Si oui, essayez de remplacer: p> this.mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
j'ai supprimé p>
à la méthode 2 et maintenant, cela fonctionne. p> this.mediarecorder.setaudioencodinginggible (16); code> p>
Ceci est un gros problème, mais a une très petite solution
dans la plupart des cas, le nom de fichier que nous obtenons de cela.file.getaBsolutePath () contient le fichier: /// comme préfixe p> J'espère que vous trouverez cette réponse utile p> p>
Cette exception sera soulevée. Si l'une des choses suivantes a échoué:
Fichier non trouvé: Assurez-vous que l'emplacement du fichier de sortie que YU a spécifié est existant, sinon elle vous jette Filenotfoundexception P>
autorisation d'écriture: Vous devez spécifier l'autorisation d'écriture dans votre Fichier manifeste. p>
record permission: spécifier l'autorisation d'enregistrement dans votre fichier manifeste. p>
Vous pouvez l'utiliser .. p>
p>
try{ mRecorder.prepare(); } catch (IOException e) { Log.e(LOG_TAG, "prepare() failed"); System.out.println(""+e); //to display the error }
pour les périphériques ciblant la version> = 10+, vous devez utiliser MediaStore A > API, dans mon dossier de cas, vous ne pourrez pas être trouvé car le fichier est hors de mon stockage de mon application. P>
Salut @mehmet avez-vous eu un exemple, dans mon cas, je reçois toujours E / Mediarecorder: préparer a échoué: -2147483648 dans certains téléphones avec Android 10
En raison du stockage scopé, vous devez soit faire comme indiquant que Google suggère ou pour l'instant, vous pouvez choisir de définir Android: DemandleGacyexternalStorage = "true" dans votre fichier manifeste. Cependant, cela ne survivra pas Android 11 Ils disent. Donc, je n'ai pas encore utilisé MediaStore API, mais je devrai bouger l'utiliser bientôt.
Tous les exemples réels ????????? Cuz Cette réponse dit littéralement rien.
En fait, IAM a également fait face au même problème dans mon temps de consolidation de l'application, et j'ai une solution parfaite, c'est que nous devrions définir toutes les autorisations telles que record_audio, read_external_storage, write_external_storage, nous devrions définir ces autorisations AndroidManifest.xml et l'exécution de ces autorisations. coller mon code ci-dessous, son code de kotlin et son succès en cours
//Here when the app opening time <!--MainActivity--> class MainActivity: AppCompatActivity() { companion object{ var permissionAccepted = false var permissions = arrayOf(android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ActivityCompat.requestPermissions(this, permissions,CODE_PERMISSIONS) setContentView(R.layout.activity_main) } @RequiresApi(Build.VERSION_CODES.M) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) when (requestCode) { REQUEST_CODE_PERMISSIONS -> { permissionAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults [1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED } } if (!permissionAccepted){ requestPermissions(permissions, REQUEST_CODE_PERMISSIONS) } } } <!--VoiceRecordActivity--> class VoiceRecordActivity: AppCompatActivity() { private var mediaRecorder: MediaRecorder? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_voice_record) //i used touch listner audio_message_send.setOnTouchListener{ v, event -> if (permissionAccepted) { //Log.e("TAG","permission accepted:$permissionAccepted") if (event.action == MotionEvent.ACTION_DOWN) { startRecording() } if (event.action == MotionEvent.ACTION_UP) { stopRecording() } }else{ //Log.e("TAG","permission accepted:$permissionAccepted") requestPermissions(permissions, REQUEST_CODE_PERMISSIONS) } false } } private fun startRecording() { mFile = Environment.getExternalStorageDirectory().absolutePath +"/$formattedDate-FC00$random.aac" if (mediaRecorder == null){ this.mediaRecorder = MediaRecorder().apply { setOutputFile(mFile) setAudioSource(MediaRecorder.AudioSource.MIC) setAudioChannels(1) setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS) setAudioEncoder(MediaRecorder.AudioEncoder.AAC) //Log.e("TAG", "mFIle: $mFile") try { this.prepare() this.start() } catch (e: IOException) { e.printStackTrace() Log.e("TAG", "error: Prepare() failed") } catch (e: InterruptedException) { e.printStackTrace() } catch (e: InterruptedException) { e.printStackTrace() } } }else{ this.mediaRecorder!!.prepare() this.mediaRecorder!!.start() } } private fun stopRecording() { mediaRecorder!!.apply { try { stop() release() }catch (e: IOException){ Log.e("TAG","error: stop${e.printStackTrace()}") } mediaRecorder = null } } override fun onStop() { super.onStop() if(mediaRecorder != null) { mediaRecorder!!.release() mediaRecorder = null } } }