国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android仿微信語音聊天功能

2020-04-11 11:12:53
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Android仿微信語音聊天功能代碼。分享給大家供大家參考。具體如下:
項目效果如下:

具體代碼如下:

AudioManager.java

package com.xuliugen.weichat;import java.io.File;import java.io.IOException;import java.util.UUID;import android.media.MediaRecorder;public class AudioManager { private MediaRecorder mMediaRecorder; private String mDir; private String mCurrentFilePath; private static AudioManager mInstance; private boolean isPrepare; private AudioManager(String dir) { mDir = dir; } public static AudioManager getInstance(String dir) { if (mInstance == null) { synchronized (AudioManager.class) { if (mInstance == null) {  mInstance = new AudioManager(dir); } } } return mInstance; } /** * 使用接口 用于回調(diào) */ public interface AudioStateListener { void wellPrepared(); } public AudioStateListener mAudioStateListener; /** * 回調(diào)方法 */ public void setOnAudioStateListener(AudioStateListener listener) { mAudioStateListener = listener; } // 去準(zhǔn)備 public void prepareAudio() { try { isPrepare = false; File dir = new File(mDir); if (!dir.exists()) { dir.mkdirs(); } String fileName = generateFileName(); File file = new File(dir, fileName); mCurrentFilePath =file.getAbsolutePath(); mMediaRecorder = new MediaRecorder(); // 設(shè)置輸出文件 mMediaRecorder.setOutputFile(dir.getAbsolutePath()); // 設(shè)置MediaRecorder的音頻源為麥克風(fēng) mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設(shè)置音頻格式 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); // 設(shè)置音頻編碼 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 準(zhǔn)備錄音 mMediaRecorder.prepare(); // 開始 mMediaRecorder.start(); // 準(zhǔn)備結(jié)束 isPrepare = true; if (mAudioStateListener != null) { mAudioStateListener.wellPrepared(); } } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 隨機(jī)生成文件的名稱 */ private String generateFileName() { return UUID.randomUUID().toString() + ".amr"; } public int getVoiceLevel(int maxlevel) { if (isPrepare) { try { // mMediaRecorder.getMaxAmplitude() 1~32767 return maxlevel * mMediaRecorder.getMaxAmplitude() / 32768 + 1; } catch (Exception e) { } } return 1; } /** * 釋放資源 */ public void release() { //mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder = null; } /** * 取消錄音 */ public void cancel() { release(); if (mCurrentFilePath != null) { File file = new File(mCurrentFilePath); file.delete(); mCurrentFilePath = null; } } public String getCurrentFilePath() { return mCurrentFilePath; }}

AudioRecorderButton.java

package com.xuliugen.weichat;import android.content.Context;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import com.xuliugen.weichat.R;import com.xuliugen.weichat.AudioManager.AudioStateListener;public class AudioRecorderButton extends Button { private static final int STATE_NORMAL = 1;// 默認(rèn)的狀態(tài) private static final int STATE_RECORDING = 2;// 正在錄音 private static final int STATE_WANT_TO_CANCEL = 3;// 希望取消 private int mCurrentState = STATE_NORMAL; // 當(dāng)前的狀態(tài) private boolean isRecording = false;// 已經(jīng)開始錄音 private static final int DISTANCE_Y_CANCEL = 50; private DialogManager mDialogManager; private AudioManager mAudioManager; private float mTime; // 是否觸發(fā)longClick private boolean mReady; private static final int MSG_AUDIO_PREPARED = 0x110; private static final int MSG_VOICE_CHANGED = 0x111; private static final int MSG_DIALOG_DIMISS = 0x112; /* * 獲取音量大小的線程 */ private Runnable mGetVoiceLevelRunnable = new Runnable() { public void run() { while (isRecording) { try {  Thread.sleep(100);  mTime += 0.1f;  mHandler.sendEmptyMessage(MSG_VOICE_CHANGED); } catch (InterruptedException e) {  e.printStackTrace(); } } } }; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_AUDIO_PREPARED: // 顯示

主站蜘蛛池模板:
郁南县|
丰镇市|
徐水县|
凤凰县|
汉沽区|
乐安县|
平舆县|
渭南市|
白银市|
常熟市|
遵义县|
寿阳县|
普陀区|
格尔木市|
昌乐县|
盘锦市|
建昌县|
喀什市|
天祝|
海门市|
大埔县|
桓仁|
大安市|
安陆市|
华阴市|
定陶县|
邵阳市|
宁南县|
兴文县|
晋城|
商河县|
望都县|
屯门区|
奎屯市|
乌兰县|
诏安县|
克拉玛依市|
改则县|
江北区|
东海县|
北海市|