【发布时间】:2019-11-21 16:12:08
【问题描述】:
我正在尝试构建一个录音应用程序。当我按住我的图像按钮时,它开始录制我的声音,当我松开按钮时,文件存储在我的手机中。但是当我不按住按钮时,只需单击图像按钮即可关闭应用程序。我希望如果我不小心按下了按钮,那么它会向我展示敬酒。我该怎么做?
这是我的代码:
public class MainActivity extends AppCompatActivity {
ImageButton recordButton;
String pathSave = "";
MediaRecorder mediaRecorder;
MediaPlayer mediaPlayer;
final int REQUEST_PERMISSION_CODE = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(!checkPermissionFromDevice())
requestPermission();
recordButton = findViewById(R.id.recordButton);
recordButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if(checkPermissionFromDevice()){
String folder_main = "AudioRecord";
File f = new File(Environment.getExternalStorageDirectory(), folder_main);
if (!f.exists()) {
f.mkdirs();
}
pathSave = Environment.getExternalStorageDirectory().getAbsolutePath()+"/AudioRecord/"+ UUID.randomUUID().toString()+"_audio_record.wav";
Toast.makeText(MainActivity.this,pathSave,Toast.LENGTH_SHORT).show();
setupMediaRecorder();
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e){
e.printStackTrace();
}
Toast.makeText(MainActivity.this,"Recording Started...",Toast.LENGTH_SHORT).show();
textView.setText("Recording Started...");
//textView.setText(pathSave);
} else{
requestPermission();
}
return true;
case MotionEvent.ACTION_UP:
mediaRecorder.stop();
doFileUpload();
Toast.makeText(MainActivity.this,"Recording Finished...",Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
}
}
【问题讨论】:
-
权限在manifest文件中吗?他们是否被应用程序授予?如果您显示异常会很有用。
-
是的,我在清单文件中设置了权限,它们是由应用授予的。按住按钮时会录制我的声音。但是,当我单击按钮而不是按住它时,会显示此错误。进程:com.example.audiorecordingpractice,PID:18206 java.lang.RuntimeException:停止失败。在 android.media.MediaRecorder.native_stop(Native Method)
-
可能是这个原因,因为
mediarecorder在释放按钮时无法初始化,触发ACTION_UP。启动 mediarecorder 后,您可以使用布尔标志started = true。而在ACTION_UP事件中,你可以检查started的值是否为真,然后继续。
标签: java android android-imageview onclicklistener ontouchlistener