- 第1章 Android Studio
- 第2章 AndroidManifest.xml
- 第3章 配置文件
- 第4章 UI Layout
- 第5章 Toast
- 第6章 Environment
- 第7章 Schedule 计划任务
- 第8章 Internationalization i18n with Android 国际化
- 第9章 存储
- 第10章 相机与相册
- 第11章 麦克风与录音
- 第12章 多媒体开发
- 第13章 定位
- 第14章 电话
- 第15章 消息广播
- 第16章 Service
- 第17章 NFC Near field communication
- 第18章 OkHttp - An HTTP HTTP/2 client for Android and Java applications
- 第19章 EventBus
- 第20章 设计模式
- 第21章 java.net 介绍和使用
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
11.3. Activity
11.3. Activity
package cn.netkiller.voice; import android.Manifest; import android.content.pm.PackageManager; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final int RECORD_AUDIO = 10; private Button record; private Button play; private MediaRecorder mediaRecorder; private TextView status; private MediaPlayer mediaPlayer; private String filename; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); status = (TextView) findViewById(R.id.status); record = (Button) findViewById(R.id.record); play = (Button) findViewById(R.id.play); record.setOnClickListener(this); play.setOnClickListener(this); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, RECORD_AUDIO); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.record: if (record.getText().equals("Record")) { this.start(); } else { this.stop(); } break; case R.id.play: play(); status.setText("播放录音"); break; } } private void start() { record.setText("Stop"); status.setText("开启录音,请对准话筒讲话"); mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); String dir = Environment.getExternalStorageDirectory().getPath(); String date = new SimpleDateFormat("yyyy-MM-ddhhmmss").format(new Date()); filename = String.format("%s/%s.3gp", dir, date); Log.e("Voice", "voice path " + filename); mediaRecorder.setOutputFile(filename); try { mediaRecorder.prepare(); } catch (IOException e) { e.printStackTrace(); } mediaRecorder.start(); } private void stop() { record.setText("Record"); status.setText("录音停止"); if (mediaRecorder != null) { mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; } } private void play() { this.stop(); if (filename == null) { Toast.makeText(getApplicationContext(), "请先录音", Toast.LENGTH_SHORT).show(); return; } try { if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.reset(); } else { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filename); mediaPlayer.prepare(); mediaPlayer.start(); } } catch (IOException e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论