1 Android錄音需要聲明錄音權(quán)限
撫順ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
uses-permission android:name="android.permission.RECORD_AUDIO" /
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /
uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /
2.錄音文件要寫到文件夾中,創(chuàng)建文件夾,在Application的onCreate方法中創(chuàng)建文件夾
@Override
public void onCreate() {
super.onCreate();
CrashHandler mCrashHandler = CrashHandler.getInstance();
mCrashHandler.init(getApplicationContext(), getClass());
initFile();
}
private void initFile() {
//錄音文件
File audioFile = new File(Constant.UrlAudio);
if (!audioFile.exists()) {
? ? audioFile.mkdirs();
} else if (!audioFile.isDirectory()) {
? ? audioFile.delete();
? ? audioFile.mkdirs();
}
//拍攝圖片文件
File imageFile = new File(Constant.UrlImage);
if (!imageFile.exists()) {
? ? imageFile.mkdirs();
} else if (!imageFile.isDirectory()) {
? ? imageFile.delete();
? ? imageFile.mkdirs();
}
}
Constant.UrlImage是個靜態(tài)的文件路徑
//錄音文件
public static String UrlAudio = FileUtil.getSdcardPathOnSys()+"/EhmFile/media/audio/";
3.在activity中開始錄音
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.media.MediaRecorder;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
public class Record2Activity extends AppCompatActivity {
// 錄音界面相關(guān)
Button btnStart;
Button btnStop;
TextView textTime;
// 錄音功能相關(guān)
MediaRecorder mMediaRecorder; // MediaRecorder 實例
boolean isRecording; // 錄音狀態(tài)
String fileName; // 錄音文件的名稱
String filePath; // 錄音文件存儲路徑
Thread timeThread; // 記錄錄音時長的線程
int timeCount; // 錄音時長 計數(shù)
final int TIME_COUNT = 0x101;
// 錄音文件存放目錄
final String audioSaveDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audiodemo/";
@Override
protected void onCreate(Bundle savedInstanceState) {
? ? super.onCreate(savedInstanceState);
? ? setContentView(R.layout.activity_record2);
? ? btnStart = (Button) findViewById(R.id.btn_start);
? ? btnStop = (Button) findViewById(R.id.btn_stop);
? ? textTime = (TextView) findViewById(R.id.text_time);
? ? btnStart.setOnClickListener(new View.OnClickListener() {
? ? ? ? @Override
? ? ? ? public void onClick(View v) {
// 開始錄音
? ? ? ? ? ? btnStart.setEnabled(false);
? ? ? ? ? ? btnStop.setEnabled(true);
? ? ? ? ? ? startRecord();
? ? ? ? ? ? isRecording = true;
// 初始化錄音時長記錄
? ? ? ? ? ? timeThread = new Thread(new Runnable() {
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? ? ? countTime();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? });
? ? ? ? ? ? timeThread.start();
? ? ? ? }
? ? });
? ? btnStop.setOnClickListener(new View.OnClickListener() {
? ? ? ? @Override
? ? ? ? public void onClick(View v) {
// 停止錄音
? ? ? ? ? ? btnStart.setEnabled(true);
? ? ? ? ? ? btnStop.setEnabled(false);
? ? ? ? ? ? stopRecord();
? ? ? ? ? ? isRecording = false;
? ? ? ? }
? ? });
}
// 記錄錄音時長
private void countTime() {
? ? while (isRecording) {
? ? ? ? Log.d("mediaRe","正在錄音");
? ? ? ? timeCount++;
? ? ? ? Message msg = Message.obtain();
? ? ? ? msg.what = TIME_COUNT;
? ? ? ? msg.obj = timeCount;
? ? ? ? myHandler.sendMessage(msg);
? ? ? ? try {
? ? ? ? ? ? timeThread.sleep(1000);
? ? ? ? } catch (InterruptedException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }
? ? Log.d("mediaRec", "結(jié)束錄音");
? ? timeCount = 0;
? ? Message msg = Message.obtain();
? ? msg.what = TIME_COUNT;
? ? msg.obj = timeCount;
? ? myHandler.sendMessage(msg);
}
/**
* 開始錄音 使用amr格式
* 錄音文件
*
* @return
*/
public void startRecord() {
// 開始錄音
? ? /* ①Initial:實例化MediaRecorder對象 */
? ? if (mMediaRecorder == null)
? ? ? ? mMediaRecorder = new MediaRecorder();
? ? try {
? ? ? ? /* ②setAudioSource/setVedioSource */
? ? ? ? mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設(shè)置麥克風(fēng)
? ? ? ? /*
? ? ? ? * ②設(shè)置輸出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式
? ? ? ? * ,H263視頻/ARM音頻編碼)、MPEG-4、RAW_AMR(只支持音頻且音頻編碼要求為AMR_NB)
? ? ? ? */
? ? ? ? mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
? ? ? ? /* ②設(shè)置音頻文件的編碼:AAC/AMR_NB/AMR_MB/Default 聲音的(波形)的采樣 */
? ? ? ? mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
? ? ? ? fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";
? ? ? ? //注意文件夾要創(chuàng)建之后才能使用
? ? ? ? filePath = Constant.UrlAudio + fileName;
? ? ? ? /* ③準(zhǔn)備 */
? ? ? ? mMediaRecorder.setOutputFile(filePath);
? ? ? ? mMediaRecorder.prepare();
? ? ? ? /* ④開始 */
? ? ? ? mMediaRecorder.start();
? ? } catch (IllegalStateException e) {
? ? ? ? Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
? ? } catch (IOException e) {
? ? ? ? e.printStackTrace();
? ? ? ? Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
? ? }
}
/**
* 停止錄音
*/
public void stopRecord() {
//有一些網(wǎng)友反應(yīng)在5.0以上在調(diào)用stop的時候會報錯,翻閱了一下谷歌文檔發(fā)現(xiàn)上面確實寫的有可能會報錯的情況,捕獲異常清理一下就行了,感謝大家反饋!
? ? try {
? ? ? ? mMediaRecorder.stop();
? ? ? ? mMediaRecorder.release();
? ? ? ? mMediaRecorder = null;
? ? ? ? filePath = "";
? ? } catch (RuntimeException e) {
? ? ? ? Log.e("mediaR", e.toString());
? ? ? ? mMediaRecorder.reset();
? ? ? ? mMediaRecorder.release();
? ? ? ? mMediaRecorder = null;
? ? ? ? File file = new File(filePath);
? ? ? ? if (file.exists())
? ? ? ? ? ? file.delete();
? ? ? ? filePath = "";
? ? }
}
// 格式化 錄音時長為 秒
public static String FormatMiss(int miss) {
? ? return "" + miss;
}
Handler myHandler = new Handler() {
? ? @Override
? ? public void handleMessage(Message msg) {
? ? ? ? switch (msg.what) {
? ? ? ? ? ? case TIME_COUNT:
? ? ? ? ? ? ? ? int count = (int) msg.obj;
? ? ? ? ? ? ? ? Log.d("meidaRe","count == " + count);
? ? ? ? ? ? ? ? textTime.setText(FormatMiss(count));
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? }
};
@Override
protected void onDestroy() {
? ? super.onDestroy();
? ? myHandler.removeCallbacksAndMessages(null);
}
}
布局文件很簡單
?xml version="1.0" encoding="utf-8"?
androidx.constraintlayout.widget.ConstraintLayout xmlns:android=""
xmlns:app=""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Record2Activity"
Button
? ? android:id="@+id/btn_stop"
? ? android:layout_width="wrap_content"
? ? android:layout_height="wrap_content"
? ? android:text="結(jié)束"
? ? app:layout_constraintBottom_toBottomOf="parent"
? ? app:layout_constraintEnd_toEndOf="parent"
? ? app:layout_constraintHorizontal_bias="0.5"
? ? app:layout_constraintStart_toEndOf="@+id/btn_start"
? ? app:layout_constraintTop_toTopOf="parent" /
Button
? ? android:id="@+id/btn_start"
? ? android:layout_width="wrap_content"
? ? android:layout_height="wrap_content"
? ? android:text="開始"
? ? app:layout_constraintBottom_toBottomOf="parent"
? ? app:layout_constraintEnd_toStartOf="@+id/btn_stop"
? ? app:layout_constraintHorizontal_bias="0.5"
? ? app:layout_constraintStart_toStartOf="parent"
? ? app:layout_constraintTop_toTopOf="parent" /
TextView
? ? android:id="@+id/text_time"
? ? android:layout_width="wrap_content"
? ? android:layout_height="wrap_content"
? ? android:layout_marginStart="11dp"
? ? android:layout_marginTop="47dp"
? ? android:text="時間"
? ? app:layout_constraintStart_toStartOf="@+id/btn_start"
? ? app:layout_constraintTop_toBottomOf="@+id/btn_start" /
/androidx.constraintlayout.widget.ConstraintLayout
這樣就可以使用錄音功能了
如果您使用的是華為手機(jī),可以通過以下方法操作:
一、通話期間錄音
通話過程中,在通話界面,點擊錄音,可錄取當(dāng)前通話內(nèi)容。
二、開啟自動錄音功能
開啟自動錄音,幫您記錄每一個重要通話內(nèi)容。
1.進(jìn)入電話 四個點 設(shè)置 通話自動錄音,開啟通話自動錄音開關(guān),會自動對所有通話進(jìn)行錄音。
2.如需對特定號碼的通話錄音,點擊自動錄音對象,設(shè)置指定號碼。
三、查看通話錄音結(jié)果
打開文件管理,搜索 Sounds 并進(jìn)入此文件夾,然后點擊 CallRecord 查看通話錄音文件。
若使用vivo手機(jī),通話錄音可參考以下設(shè)置方法:
1、可以進(jìn)入手機(jī)設(shè)置--(應(yīng)用與權(quán)限)--(系統(tǒng)應(yīng)用設(shè)置)--電話--通話錄音中,選擇“所有通話自動錄音”或“指定號碼自動錄音”,設(shè)置后,當(dāng)您開始通話時,手機(jī)會自動進(jìn)行錄音。
從Funtouch OS 2.0開始的機(jī)器都支持通話自動錄音(不包括Funtouch OS 3.0)
2、撥打電話時,您點擊通話界面的“錄音”即可錄通話內(nèi)容,通話結(jié)束后,文件可進(jìn)入文件管理--本地文件/所有文件/手機(jī)存儲--Record/錄音文件夾中找到。
1.安卓手機(jī)錄音尋找方法如下:第一打開手機(jī)的錄音機(jī),點擊手機(jī)按鍵菜單鍵。
2.進(jìn)入錄音機(jī)設(shè)定模式,看看錄音文件是存在存儲卡還是手機(jī)內(nèi)存文件夾。
3.如果看到手機(jī)是把錄音文件放在了存儲卡上,手機(jī)連接上電腦進(jìn)入我的存儲卡。
4.打開SOUND文件夾,錄音文件都在這里了,錄音文件為3ga后綴的文件這些就是安卓類手機(jī)的錄音文件了。
若使用的是vivo手機(jī),在通話的時候點擊鍵盤上的錄音按鈕即可錄音,錄音文件保存在文件管理--本地文件/所有文件/手機(jī)存儲--Record/錄音文件夾中(通話錄音的保存路徑無法修改)。
若是指vivo手機(jī)查看通話錄音保存位置:
OriginOS Ocean系統(tǒng):進(jìn)入文件管理--手機(jī)存儲--(Recordings)--Record--Call文件夾--即可查看通話錄音;
其他系統(tǒng):進(jìn)入文件管理--手機(jī)存儲/本地文件/所有文件--Record/錄音文件夾--即可查看通話錄音。
注:通話錄音的保存路徑不支持修改。
更多疑問可以點擊此鏈接詢問在線客服。