MediaStore
組み込みのサウンド レコーダー アプリを呼び出すときに、保存先のフォルダー (sdcard フォルダーなど)を指定したいと思います。Android のドキュメントによるとEXTRA_OUTPUT
、RECORD_SOUND_ACTION
.
これどうやってするの?
MediaStore
組み込みのサウンド レコーダー アプリを呼び出すときに、保存先のフォルダー (sdcard フォルダーなど)を指定したいと思います。Android のドキュメントによるとEXTRA_OUTPUT
、RECORD_SOUND_ACTION
.
これどうやってするの?
デフォルトのファイル名と場所を使用してファイルを記録できるようにしてから、ファイルを移動する必要があります。ファイルの移動は簡単ではありません。これが完全な例です。
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import com.google.common.io.Files;
public class SoundRecorder extends Activity {
private static final int RECORD_QUESTION_SOUND_REQUEST_CODE = 1;
@Override protected void onResume() {
super.onResume();
Intent recordIntent = new Intent(
MediaStore.Audio.Media.RECORD_SOUND_ACTION);
// NOTE: Sound recorder does not support EXTRA_OUTPUT
startActivityForResult(recordIntent, RECORD_QUESTION_SOUND_REQUEST_CODE);
}
@Override protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case RECORD_QUESTION_SOUND_REQUEST_CODE:
if (resultCode == Activity.RESULT_OK) {
// Sound recorder does not support EXTRA_OUTPUT
Uri uri = data.getData();
try {
String filePath = getAudioFilePathFromUri(uri);
copyFile(filePath);
getContentResolver().delete(uri, null, null);
(new File(filePath)).delete();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
private String getAudioFilePathFromUri(Uri uri) {
Cursor cursor = getContentResolver()
.query(uri, null, null, null, null);
cursor.moveToFirst();
int index = cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DATA);
return cursor.getString(index);
}
private void copyFile(String fileName) throws IOException {
Files.copy(new File(fileName),
new File(Environment.getExternalStorageDirectory(), fileName));
}
}
注: com.google.common.io.Files.copy()
Guava のファイル コピーからのものです。別の実装を自由に使用するか、独自の Java ファイル コピーを作成してください。