Android 自动停止录音类中的录音
我从中找到了以.wav格式存储音频的代码。该代码有两个按钮用于开始和停止录制。我想在一段时间后停止音频录制。它使用Android的AudioRecord类来存储音频。是否可以这样做Android 自动停止录音类中的录音,android,audio,Android,Audio,我从中找到了以.wav格式存储音频的代码。该代码有两个按钮用于开始和停止录制。我想在一段时间后停止音频录制。它使用Android的AudioRecord类来存储音频。是否可以这样做 04-19 08:20:00.688: E/AndroidRuntime(2405): FATAL EXCEPTION: main 04-19 08:20:00.688: E/AndroidRuntime(2405): java.lang.RuntimeException: Unable to start ac
04-19 08:20:00.688: E/AndroidRuntime(2405): FATAL EXCEPTION: main
04-19 08:20:00.688: E/AndroidRuntime(2405): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidwaverecorder/com.example.androidwaverecorder.MainActivity}: java.lang.NullPointerException
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.os.Handler.dispatchMessage(Handler.java:99)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.os.Looper.loop(Looper.java:137)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.ActivityThread.main(ActivityThread.java:5039)
04-19 08:20:00.688: E/AndroidRuntime(2405): at java.lang.reflect.Method.invokeNative(Native Method)
04-19 08:20:00.688: E/AndroidRuntime(2405): at java.lang.reflect.Method.invoke(Method.java:511)
04-19 08:20:00.688: E/AndroidRuntime(2405): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-19 08:20:00.688: E/AndroidRuntime(2405): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-19 08:20:00.688: E/AndroidRuntime(2405): at dalvik.system.NativeStart.main(Native Method)
04-19 08:20:00.688: E/AndroidRuntime(2405): Caused by: java.lang.NullPointerException
04-19 08:20:00.688: E/AndroidRuntime(2405): at com.example.androidwaverecorder.MainActivity.onCreate(MainActivity.java:47)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.Activity.performCreate(Activity.java:5104)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-19 08:20:00.688: E/AndroidRuntime(2405): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-19 08:20:00.688: E/AndroidRuntime(2405): ... 11 more
04-19 08:31:55.766: E/Trace(2899): error opening trace file: No such file or directory (2)
04-19 08:31:55.766: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
04-19 08:31:55.766: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
04-19 08:31:55.766: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
04-19 08:31:56.386: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
04-19 08:31:56.386: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
04-19 08:31:56.416: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
04-19 08:31:56.416: W/Trace(2899): Unexpected value from nativeGetEnabledTags: 0
在创建MainActivity时使用此代码
final Runnable r = new Runnable()
{
public void run()
{
if (WavAudioRecorder.State.ERROR == mRecorder.getState()) {
mRecorder.release();
mRecorder = WavAudioRecorder.getInstanse();
mRecorder.setOutputFile(mRcordFilePath);
btnControl.setText("Start");
} else {
mRecorder.stop();
mRecorder.reset();
btnControl.setText("Start");
}
}
}
};
handler.postDelayed(r, YOUR TIME IN MILLISEC);
编辑
private static final String mRcordFilePath = Environment.getExternalStorageDirectory() + "/testwave.wav";
到
我找到了解决办法
您可以使用AsyncTask来执行此操作
简要说明如何操作:
当您开始录制时,在另一个类中创建一个线程,该线程将在所需的时间段内休眠,然后调用记录器停止函数
public class Auto_Stop_Task extends AsyncTask<Void,Void, Integer> {
//int flag=0;
@Override
protected Integer doInBackground(Void... arg0) {
try {
Thread.sleep(30000);
MainActivity.mRecorder.stop();
MainActivity.mRecorder.reset();
//flag=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
谢谢大家的帮助。为什么不使用计时器并调用停止录制的逻辑?如何停止计时器线程?其显示错误“无法从类型处理程序对非静态方法postDelayed(Runnable,long)进行静态引用”更改私有静态最终字符串mRcordFilePath=Environment.getExternalStorageDirectory()+“/testwave.wav”;字符串mRcordFilePath=Environment.getExternalStorageDirectory()+“/testwave.wav”;现在我得到一个空指针异常,应用程序甚至没有启动。我必须添加任何权限吗?java.lang.RuntimeException:无法启动活动组件信息{com.example.androidwaverecorder/com.example.androidwaverecorder.MainActivity}:java.lang.NullPointerException。这是错误
public class Auto_Stop_Task extends AsyncTask<Void,Void, Integer> {
//int flag=0;
@Override
protected Integer doInBackground(Void... arg0) {
try {
Thread.sleep(30000);
MainActivity.mRecorder.stop();
MainActivity.mRecorder.reset();
//flag=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
new Auto_Stop_Task().execute();