Cách sử dụng Android MediaRecorder
Nếu bạn muốn phát triển một ứng dụng Android có khả năng ghi âm hoặc quay video, thì Android MediaRecorder là một công cụ quan trọng để giúp bạn thực hiện điều đó.
Trong bài viết này, chúng ta sẽ tìm hiểu về khái niệm, vai trò, các thuộc tính và phương thức của Android MediaRecorder, những lưu ý khi sử dụng nó, và cung cấp một ví dụ cụ thể về cách sử dụng nó.
1. Tìm hiểu về MediaRecorder trong Android
Android MediaRecorder là một lớp cung cấp các phương thức để ghi âm và quay video trên thiết bị Android. Nó cho phép ứng dụng của bạn có thể chụp hình ảnh hoặc ghi âm trên thiết bị của người dùng, rồi lưu lại dưới dạng tệp để sau này có thể xem lại hoặc chia sẻ.
2. Các thuộc tính của MediaRecorder trong Android
Android MediaRecorder cung cấp một số thuộc tính và phương thức để bạn có thể tùy chỉnh và điều khiển quá trình ghi âm hoặc quay video.
Bài viết này được đăng tại [free tuts .net]
Các thuộc tính của Android MediaRecorder:
setAudioSource(int source)
- thiết lập nguồn âm thanh cho việc ghi âm (vd: microphone).setVideoSource(int source)
- thiết lập nguồn video cho việc quay video (vd: camera).setOutputFormat(int format)
- thiết lập định dạng của tệp được ghi lại (vd: MPEG-4).setAudioEncoder(int encoder)
- thiết lập bộ mã hóa âm thanh (vd: AAC).setVideoEncoder(int encoder)
- thiết lập bộ mã hóa video (vd: H.264).setOutputFile(FileDescriptor fd)
- thiết lập tệp đích để lưu trữ âm thanh hoặc video.
Các phương thức của Android MediaRecorder:
prepare()
- chuẩn bị MediaRecorder để bắt đầu quá trình ghi âm hoặc quay video.start()
- bắt đầu quá trình ghi âm hoặc quay video.stop()
- kết thúc quá trình ghi âm hoặc quay video.reset()
- đặt lại MediaRecorder về trạng thái ban đầu.release()
- giải phóng tài nguyên của MediaRecorder.
3. Những lưu ý khi sử dụng MediaRecorder trong Android
Khi sử dụng Android MediaRecorder, bạn cần lưu ý một số điểm sau đây để đảm bảo rằng quá trình ghi âm hoặc quay video diễn ra đúng và ổn định:
- Luôn kiểm tra trạng thái của MediaRecorder trước khi bắt đầu ghi âm hoặc quay video. Nếu trạng thái không chính xác, bạn cần đặt lại nó về trạng thái ban đầu trước khi tiếp tục.
- Hạn chế sử dụng nhiều MediaRecorder trong cùng một thời điểm, vì điều này có thể gây ra sự cố và làm giảm hiệu suất của ứng dụng.
- Nếu ứng dụng của bạn đang chạy trên các phiên bản Android cũ hơn, bạn cần cẩn thận khi sử dụng MediaRecorder vì nó có thể không hoạt động chính xác trên những phiên bản này.
- Nếu ứng dụng của bạn sử dụng nhiều loại nguồn âm thanh hoặc video khác nhau, bạn cần đảm bảo rằng MediaRecorder được thiết lập đúng để có thể xử lý chúng.
4. Ví dụ minh họa về MediaRecorder trong Android
Dưới đây là ví dụ minh họa về MediaRecorder trong Android:
File: activity_main.xml
<RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="68dp" android:layout_marginTop="50dp" android:text="Start Recording" android:onClick="startRecording" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="64dp" android:text="Stop Recording" android:onClick="stopRecording" /> </RelativeLayout>
File: MainActivity.java
package com.javatpoint.mediarecorder; import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.media.MediaRecorder; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { MediaRecorder recorder; File audiofile = null; static final String TAG = "MediaRecording"; Button startButton,stopButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startButton = (Button) findViewById(R.id.button1); stopButton = (Button) findViewById(R.id.button2); } public void startRecording(View view) throws IOException { startButton.setEnabled(false); stopButton.setEnabled(true); File dir = Environment.getExternalStorageDirectory(); try { audiofile = File.createTempFile("sound", ".3gp", dir); } catch (IOException e) { Log.e(TAG, "external storage access error"); return; } recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(audiofile.getAbsolutePath()); recorder.prepare(); recorder.start(); } public void stopRecording(View view) { startButton.setEnabled(true); stopButton.setEnabled(false); recorder.stop(); recorder.release(); addRecordingToMediaLibrary(); } protected void addRecordingToMediaLibrary() { ContentValues values = new ContentValues(4); long current = System.currentTimeMillis(); values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName()); values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000)); values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp"); values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath()); ContentResolver contentResolver = getContentResolver(); Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Uri newUri = contentResolver.insert(base, values); sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri)); Toast.makeText(this, "Added File " + newUri, Toast.LENGTH_LONG).show(); } }
5. Tổng kết
Trong bài viết này, chúng ta đã tìm hiểu về Android MediaRecorder và vai trò của nó trong việc ghi âm và quay video trên thiết bị Android. Chúng ta đã đi vào chi tiết các thuộc tính và phương thức của MediaRecorder, cùng với những lưu ý khi sử dụng để đảm bảo rằng ứng dụng của bạn hoạt động đúng và ổn định. Hi vọng bạn có thể hiểu và sử dụng MediaRecorder cho những ứng dụng cần tính năng ghi âm, quay video để hỗ trợ người dùng trong việc ghi lại và chia sẻ những trải nghiệm của họ.