2017-06-05 3 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) 
     } 
    } 

/* このコードアンドロイド:メイン プロセス:com.example.admin.lifeplus、PID:コードは、API 24

致命的な例外に関連付けられているエラーでAPI 19で動作しなく21679 java.lang.RuntimeException:setAudioSourceが失敗しました。 android.media.MediaRecorder.setAudioSource(ネイティブメソッド) com.example.admin.lifeplus.record.MediaRecorderReady(record.kt:138) com.example.admin.lifeplus.record $ onCreate $ 1.onClick( (View.java:22433) at android.view.View.performClick(View.java:5623) (android.view.View)$ PerformClick.run(View.java:22433) (android.os.Handler.handleCallback Handler.java:751) (android.os.Handler.dispatchMessage(Handler.java:95) (android.os.Looper.loop(Looper.java:154) 、android.app.ActivityThread.main(ActivityThread。 java:6247) (java.lang.reflect.Method.invoke)(ネイティブメソッド) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:872) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:762) */

上記のコードはオーディオファイルを記録するコードですが、api 19デバイスで正常に動作しますが、api 24では動作しません。

+1

実行時にRECORD_AUDIO権限を求めていますか? – AlexTa

+0

はい、AndroidManifestファイルに含まれていますが、私も許可なしで同じコードをチェックしました –

+0

同じエラーが存在します –

答えて

2

実行時にAPIレベル23以上でRECORD_AUDIO権限を要求する必要があります。

詳細については、thisのリンクをご覧ください。

+0

すべてのオーディオレコードの許可コードを追加する必要があります –

関連する問題