[英]How can i get both OnClick and OnTouch Listeners for an ImageButton?
我正在尝试构建一个录音应用程序。 当我按住我的图像按钮时,它开始录制我的声音,当我释放按钮时,文件存储在我的手机中。 但是当我不按住按钮时,只需单击图像按钮,然后应用程序就会关闭。 我希望如果我不小心按下了按钮,它会向我展示祝酒词。 我该怎么做?
这是我的代码:
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;
}
});
}
}
我不清楚你在要求什么,但我看到的最简单的决定是节省行动时间以及行动何时发生 - 检查已经过去了多少时间。 system.currentTimeMillis() 应该足够了。 它是最简单的,但甚至不是最好的。
MediaRecorder.stop() 上的 Android 文档
公共无效停止()
停止录制。 在 start() 之后调用它。 停止录制后,您必须重新配置它,就像它刚刚构建一样。 请注意,如果在调用 stop() 时未收到有效的音频/视频数据,则会故意向应用程序抛出 RuntimeException。 如果 stop() 在 start() 之后立即调用,就会发生这种情况。 失败让应用程序采取相应的措施来清理 output 文件(例如删除 output 文件),因为 output 文件在发生这种情况时构造不正确。
如果在 start() 之前调用,则抛出 IllegalStateException。
您需要在调用mediaRecorder.stop();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.