Android開發(fā)長按錄音

一、前言:長按錄音不算太常見功能漆腌,萬一你剛好需要呢贼邓。

二、效果圖:

長按錄音.png

三闷尿、解決思路

主要用的是MediaRecorder塑径,可能你百度MediaRecorder,就知道怎么做了填具,不過有些細(xì)節(jié)需要自己處理统舀。

四、給長按的全部代碼

private val mOnVoiceBtnTouchListener =
    OnTouchListener { v, event ->
        if (mBinding.tvClickPlay.visibility == View.VISIBLE){
            return@OnTouchListener false
        }
        val mOffsetLimit = 70 * v.context.resources.displayMetrics.density
        //val permissions = arrayOf(Manifest.permission.RECORD_AUDIO)
        if (!PermissionCheckUtil.checkPermissions(v.context, PermissionAppUtils.Group.RECORD_AUDIO_STORAGE)
            && event.action == MotionEvent.ACTION_DOWN
        ) {
            DialogUtils.okAndCancel(mContext, getString(R.string.record_audio_permission_tip) , ok = getString(R.string.go_open), okListener = {
                    PermissionAppUtils.requestCombinedPermission(mContext,
                        PermissionAppUtils.Group.RECORD_AUDIO_STORAGE) {
                        if (it.granted){

                        } else  {
                            if (it.shouldShowRequestPermissionRationale){
                                //禁止,不做操作

                            } else {
                                //永久禁止,需求說只彈前面的彈框劳景,永久禁止就直接跳設(shè)置
                                CUtils.startAppSettings(mContext)
                            }
                        }
                    }

                })

            return@OnTouchListener true
        }
        if (event.action == MotionEvent.ACTION_DOWN) {
            if (MyAudioPlayManager.getInstance().isPlaying) {
                MyAudioPlayManager.getInstance().stopPlay()
            }
            // 判斷正在視頻通話和語音通話中不能進(jìn)行語音錄制
            if (EasyFloat.appFloatIsShow(SingleCallActivity.video_float_tag) || EasyFloat.appFloatIsShow(SingleCallActivity.audio_float_tag)
                || ActivityUtil.isActivityExist(SingleCallActivity::class.java)) {
                    mContext.show(R.string.rc_voip_occupying)
                return@OnTouchListener true
            }
            mBinding.ivStartRecordAudio.setImageResource(R.mipmap.ic_record_audio_press)
            //開始錄音,錄之前先刪掉之前的本地錄的
            MyAudioRecordManager.getInstance().deleteAudioFile()
            currentRecordTime = 0
            isStartRecording = true
            MyAudioRecordManager.getInstance().startRec(mContext)

            mLastTouchY = event.y
            mUpDirection = false
            if (disposableRecordTime == null || disposableRecordTime!!.isDisposed){
                disposableRecordTime = Observable.interval(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread())
                    .take(recordMaxTime)
                    .subscribe{
                        Log.i("currentRecordTime",it.toString())
                        currentRecordTime = it+1
                        dealCurrentTimeShow(currentRecordTime,true)
                        //錄夠15s停止錄制
                        if (currentRecordTime == recordMaxTime){
                            MyAudioRecordManager.getInstance().stopRec()
                            showRecordAfter()
                        }
                    }
            }

        } else if (event.action == MotionEvent.ACTION_MOVE) {
            mBinding.ivStartRecordAudio.setImageResource(R.mipmap.ic_record_audio_press)

        } else if (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL) {
            mBinding.ivStartRecordAudio.setImageResource(R.mipmap.ic_record_audio)
            //松手停止錄制
            if (isStartRecording){
                MyAudioRecordManager.getInstance().stopRec()
                if (currentRecordTime < 3){
                    show(R.string.record_audio_not_enough_tip)
                    currentRecordTime = 0
                    dealCurrentTimeShow(currentRecordTime,true)
                    MyAudioRecordManager.getInstance().deleteAudioFile()
                } else {
                    showRecordAfter()
                }
                isStartRecording = false
            }

            disposableRecordTime?.run {
                if (!isDisposed){
                    dispose()
                }
            }
        }

        true
    }

需要完整代碼的可私信我

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末誉简,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盟广,更是在濱河造成了極大的恐慌闷串,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筋量,死亡現(xiàn)場離奇詭異烹吵,居然都是意外死亡碉熄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門肋拔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锈津,“玉大人,你說我怎么就攤上這事凉蜂∏戆穑” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵跃惫,是天一觀的道長叮叹。 經(jīng)常有香客問我,道長爆存,這世上最難降的妖魔是什么蛉顽? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮先较,結(jié)果婚禮上携冤,老公的妹妹穿的比我還像新娘。我一直安慰自己闲勺,他們只是感情好曾棕,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菜循,像睡著了一般翘地。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上癌幕,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天衙耕,我揣著相機(jī)與錄音,去河邊找鬼勺远。 笑死橙喘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胶逢。 我是一名探鬼主播厅瞎,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼初坠!你這毒婦竟也來了和簸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤碟刺,失蹤者是張志新(化名)和其女友劉穎比搭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體南誊,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡身诺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抄囚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霉赡。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幔托,靈堂內(nèi)的尸體忽然破棺而出穴亏,到底是詐尸還是另有隱情,我是刑警寧澤重挑,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布嗓化,位于F島的核電站,受9級特大地震影響谬哀,放射性物質(zhì)發(fā)生泄漏刺覆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一史煎、第九天 我趴在偏房一處隱蔽的房頂上張望谦屑。 院中可真熱鬧,春花似錦篇梭、人聲如沸氢橙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悍手。三九已至,卻和暖如春袍患,著一層夾襖步出監(jiān)牢的瞬間坦康,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工协怒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留涝焙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓孕暇,卻偏偏與公主長得像仑撞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妖滔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容