2017-06-05 1 views
0
import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import android.media.MediaPlayer 
import android.media.MediaRecorder 
import android.os.Environment 
import android.view.View 
import android.widget.Toast 
import java.io.IOException 
import android.widget.ImageButton 


class record : AppCompatActivity() { 

    var buttonStart: ImageButton? = null 
    var buttonStop: ImageButton? = null 
    var buttonPlayLastRecordAudio: ImageButton? = null 
    var buttonStopPlayingRecording: ImageButton? = null 
    var AudioSavePathInDevice = "Blesson" 
    var mediaRecorder: MediaRecorder? = null 


    var mediaPlayer: MediaPlayer? = null 

    public override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_record) 

     buttonStart = findViewById(R.id.record) as ImageButton 
     buttonStop = findViewById(R.id.stop) as ImageButton 
     buttonPlayLastRecordAudio = findViewById(R.id.play) as ImageButton 
     buttonStopPlayingRecording= findViewById(R.id.playstop) as ImageButton 
     buttonStop!!.isEnabled = false 
     buttonPlayLastRecordAudio!!.isEnabled = false 




     buttonStart!!.setOnClickListener { 


      AudioSavePathInDevice = Environment.getExternalStorageDirectory().absolutePath + "/" +"Medpro.mp3" 

      MediaRecorderReady() 

      try { 
       mediaRecorder!!.prepare() 
       mediaRecorder!!.start() 
      } catch (e: IllegalStateException) { 
       Toast.makeText(this, "Recording roblem started", 
         Toast.LENGTH_LONG).show() 
      } 



      buttonStart!!.isEnabled = false 
      buttonStart!!.visibility = View.INVISIBLE 
      buttonStop!!.visibility = View.VISIBLE 
      buttonStop!!.isEnabled = true 

      Toast.makeText(this, "Recording started", 
        Toast.LENGTH_LONG).show() 

     } 
      buttonStop!!.setOnClickListener { 

       mediaRecorder!!.stop() 
       buttonStop!!.isEnabled = false 
       buttonPlayLastRecordAudio!!.isEnabled = true 
       // buttonStart!!.isEnabled = true 
       buttonStopPlayingRecording!!.isEnabled = false 

        Toast.makeText(this, "Recording Completed", 
          Toast.LENGTH_LONG).show() 
       buttonStop!!.visibility = View.INVISIBLE 
        buttonPlayLastRecordAudio!!.visibility = View.VISIBLE 


     } 

       buttonPlayLastRecordAudio!!.setOnClickListener { 
        buttonStop!!.isEnabled = false 
        buttonStart!!.isEnabled = false 
        buttonPlayLastRecordAudio!!.visibility=View.INVISIBLE 
        buttonStopPlayingRecording!!.isEnabled = true 
        buttonStopPlayingRecording!!.visibility=View.VISIBLE 

        mediaPlayer = MediaPlayer() 
        try { 
         mediaPlayer!!.setDataSource(AudioSavePathInDevice) 
         mediaPlayer!!.prepare() 
         } catch (e: IOException) { 
           Toast.makeText(this, "Recoring not found", 
           Toast.LENGTH_LONG).show() 
         } 

          mediaPlayer!!.start() 
          Toast.makeText(this, "Recording Playing", 
          Toast.LENGTH_LONG).show() 
       } 

       buttonStopPlayingRecording!!.setOnClickListener { 

       buttonStopPlayingRecording!!.isEnabled = false 
       buttonPlayLastRecordAudio!!.isEnabled = true 

         if (mediaPlayer != null) { 
         mediaPlayer!!.stop() 
         mediaPlayer!!.release() 
        MediaRecorderReady() 
         } 
       } 



     } 


     fun MediaRecorderReady() { 
      mediaRecorder = MediaRecorder() 
      mediaRecorder!!.setAudioSource(MediaRecorder.AudioSource.MIC) 
      mediaRecorder!!.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) 
      mediaRecorder!!.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB) 
      mediaRecorder!!.setOutputFile(AudioSavePathInDevice) 
     } 
    } 

/* Der Fehler, der mit diesem CodeAndroid: Code funktioniert mit api 19 aber nicht mit api 24

FATAL AUSNAHME verbunden ist: Haupt Prozess: com.example.admin.lifeplus, PID: 21679 java.lang.RuntimeException: setAudioSource ist fehlgeschlagen. bei android.media.MediaRecorder.setAudioSource (Native Methode) bei com.example.admin.lifeplus.record.MediaRecorderReady (record.kt: 138) bei com.example.admin.lifeplus.record $ onCreate $ 1.onClick (record.kt: 45) bei android.view.View.performClick (View.java:5623) bei android.view.View $ PerformClick.run (View.java:22433) bei android.os.Handler.handleCallback (Handler.java:751) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread. Java: 6247) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:872) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762) */

Der oben genannte ist mein Code für die Aufnahme einer Audiodatei, es funktioniert gut mit api 19 Geräten, aber nicht mit api 24. Können Sie mir helfen?

+1

Fragen Sie zur Laufzeit die Berechtigung RECORD_AUDIO? – AlexTa

+0

ja, dass ich in AndroidManifest-Datei enthalten, habe ich den gleichen Code ohne Berechtigung überprüft –

+0

Der gleiche Fehler existiert –

Antwort

2

Sie müssen die Berechtigung RECORD_AUDIO zur Laufzeit für die API-Stufe 23 und höher anfordern.

Auschecken this Link für weitere Informationen.

+0

Also ich muss den Code für die Berechtigung für jede Audioaufnahme hinzufügen –

Verwandte Themen