如果未安装SD卡,getExternalFilesDir()会做什么?

时间:2019-04-17 20:05:39

标签: java android

我正在制作一个使用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");,此行代码将创建一个名为“ test.pcm”的文件,它位于getExternalFilesDir(Environment.DIRECTORY_MUSIC)所指路径的任何位置。

我认为它是一个音乐文件夹,但我不了解我的Android设备当前未安装SD或任何外部存储设备,因此该代码仍如何工作?我仍然可以使用AudioTrack API播放语音。

由于我需要对存储的PCM文件进行一些处理,因此我想知道该文件实际存储在设备中的什么位置以及如何访问它。

预先感谢!

1 个答案:

答案 0 :(得分:1)

根据getExternalFilesDir(type)的文档:

  

将绝对路径返回到主共享/外部存储设备上目录的绝对路径,应用程序可以在该目录中放置其拥有的永久文件。

假设您正在手机或平板电脑上运行应用程序,即使您的设备未安装SD卡,它也具有板载存储空间。从您的应用程序的角度来看,板载存储是这种情况下的主要存储设备。

此外,我建议阅读getExternalFilesDir的整个文档,以获取更深入的了解。