Что делает getExternalFilesDir (), если SD-карта не установлена?

1

Я делаю проект, который использует AudioRecord API для записи голоса и обработки с полученными данными PCM-16bit.

В настоящее время я использую следующий код:

private void startRecording() { 

final int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize);
final byte raw_data[] = new byte[bufferSize];

final File file = new File(getExternalFilesDir(Environment.DIRECTORY_MUSIC), "test.pcm");

if (!file.mkdirs()) {
    Log.e(TAG, "Directory not created");
}
if (file.exists()) {
    file.delete();
}

recorder.startRecording();
isRecording = true;

recordingThread = new Thread(new Runnable() {
    public void run() {

        FileOutputStream os = null;
        try {
            os = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        while (isRecording) {
            int read = recorder.read(raw_data, 0, bufferSize);
            if (AudioRecord.ERROR_INVALID_OPERATION != read) {

                try {
                    os.write(raw_data);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        try {
            Log.i(TAG, "run: close file output stream !");
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}, "AudioRecorder Thread");

recordingThread.start();
}

final File file = new FilegetExternalFilesDir(Environment.DIRECTORY_MUSIC), "test.pcm"); я понимаю, final File file = new FilegetExternalFilesDir(Environment.DIRECTORY_MUSIC), "test.pcm"); эта строка кода создаст файл с именем "test.pcm", и он будет расположен по любому пути, getExternalFilesDir(Environment.DIRECTORY_MUSIC).

Я предполагаю, что это музыкальная папка, но что я не понимаю, так это то, что на моем Android-устройстве в настоящее время нет SD или какого-либо внешнего хранилища, так почему же этот код все еще работает? Я все еще могу воспроизводить голос с помощью AudioTrack API.

Поскольку мне нужно выполнить некоторую обработку сохраненного файла PCM, мне интересно, где этот файл фактически хранится на моем устройстве и как я могу получить к нему доступ.

Заранее спасибо !

Теги:
android-studio

1 ответ

1

Согласно документации getExternalFilesDir(type):

Возвращает абсолютный путь к каталогу на основном общем/внешнем запоминающем устройстве, где приложение может разместить свои постоянные файлы.

Предполагая, что вы запускаете приложение на телефоне или планшете, даже если на вашем устройстве не установлена SD-карта, оно имеет встроенную память. С точки зрения вашего приложения, встроенное хранилище в этом случае является основным устройством хранения.

Кроме того, я предлагаю прочитать всю документацию getExternalFilesDir чтобы получить более глубокое понимание.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню