android 录音机demo
时间: 2023-09-11 10:03:42 浏览: 161
Android 录音机Demo
4星 · 用户满意度95%
这里是一个简单的 Android 录音机 Demo:
1. 在 Android Studio 中创建一个新项目,选择 Empty Activity 模板。
2. 在 app/build.gradle 文件中添加以下依赖项:
```groovy
dependencies {
implementation 'com.github.piasy:RxAndroidAudio:0.6.0'
implementation 'com.github.piasy:DroidRepos:0.9.4'
}
```
3. 在布局文件中添加一个按钮和一个文本视图:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Record"/>
<TextView
android:id="@+id/tv_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn_record"
android:layout_centerHorizontal="true"
android:paddingTop="16dp"/>
</RelativeLayout>
```
4. 在 MainActivity.java 中添加以下代码:
```java
public class MainActivity extends AppCompatActivity {
private Button mBtnRecord;
private TextView mTvStatus;
private Disposable mDisposable;
private MediaRecorder mMediaRecorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnRecord = findViewById(R.id.btn_record);
mTvStatus = findViewById(R.id.tv_status);
mBtnRecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDisposable != null && !mDisposable.isDisposed()) {
mDisposable.dispose();
mDisposable = null;
stopRecording();
} else {
mDisposable = RxAndroidAudio
.streamMediaRecorder(MainActivity.this, getOutputFile())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
switch (integer) {
case RxAndroidAudio.RxMediaRecorderState.MIC_ERROR:
mTvStatus.setText("MIC_ERROR");
break;
case RxAndroidAudio.RxMediaRecorderState.RECORDING:
mTvStatus.setText("RECORDING");
break;
case RxAndroidAudio.RxMediaRecorderState.MAX_DURATION_REACHED:
mTvStatus.setText("MAX_DURATION_REACHED");
mDisposable.dispose();
mDisposable = null;
stopRecording();
break;
case RxAndroidAudio.RxMediaRecorderState.MAX_FILESIZE_REACHED:
mTvStatus.setText("MAX_FILESIZE_REACHED");
mDisposable.dispose();
mDisposable = null;
stopRecording();
break;
case RxAndroidAudio.RxMediaRecorderState.STOP:
mTvStatus.setText("STOP");
mDisposable.dispose();
mDisposable = null;
stopRecording();
break;
}
}
});
}
}
});
}
private String getOutputFile() {
File file = new File(getExternalFilesDir(null), "test.mp3");
if (file.exists()) {
file.delete();
}
return file.getAbsolutePath();
}
private void stopRecording() {
if (mMediaRecorder != null) {
try {
mMediaRecorder.stop();
mMediaRecorder.reset();
mMediaRecorder.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
```
这个 Demo 使用了 RxAndroidAudio 库来录制音频,并使用 MediaRecorder 类来停止录制。当用户点击 Record 按钮时,该应用程序将开始录音,当用户再次点击 Record 按钮时,该应用程序将停止录音。在录制过程中,应用程序将在 TextView 上显示状态。
阅读全文