Android:代码适用于 api 19 但不适用于 api 24

祝福塞缪尔
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:21679 java.lang.RuntimeException:setAudioSource 失败。在 android.media.MediaRecorder.setAudioSource(Native Method) 在 com.example.admin.lifeplus.record.MediaRecorderReady(record.kt:138) 在 com.example.admin.lifeplus.record$onCreate$1.onClick(record.kt :45) 在 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。 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872) 处的reflect.Method.invoke(Native Method) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) * /

上面给出的是我录制音频文件的代码,它适用于 api 19 设备,但不适用于 api 24。你能帮我吗?

亚历克斯塔

对于 API 级别 23 及以上,您必须在运行时请求 RECORD_AUDIO 权限。

查看链接了解更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

进度条适用于Android API 23,但不适用于21或22

适用于API 19的Android工具栏?(对于API 21可以正常使用)

EditText填充属性不适用于API 19和21

适用于Android的附近连接API-不适用于某些设备

通知声音不适用于api 10 android

通知不适用于API 23

intent.getParcelableExtra()适用于API 23,但不适用于API 25

AllowAnyMethod适用于某些API调用,但不适用于其他API调用

Google Analytics API请求适用于失眠/邮递员,但不适用于网络应用

API适用于Postman,但不适用于浏览器

向api发送请求适用于Android,但不适用于IOS。Xamarin

API适用于POSTMAN,不适用于Retrofit Android

googlemaps api适用于python终端,但不适用于脚本

对Web-api的ajax调用适用于GET,但不适用于POST

迁移到android studio后,Android主题不适用于API v19(但适用于API v21)

映射不适用于api调用

API适用于Java应用程序,但不适用于JavaFX

jQuery API不适用于JavaScript

Node.js API-适用于Postman,但不适用于Angular.js

获取 API 不适用于 Proguard

docker 子域 api.localhost 适用于 chrome 但不适用于终端

API 调用适用于 postman 但不适用于 filemaker

RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net

Particle Photon API:获取客户令牌适用于 Postman 但不适用于 axios

相同的 BSD 套接字 API 程序适用于 Python 但不适用于 C++ 或 Rust

Express node.js api app.post 确实适用于 / 但不适用于 /path

React Native HTTPS Api 调用适用于 IOS,但不适用于 Android

API 请求适用于 cURL 但不适用于 Guzzle?

对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)