Альтернатива ресурсам Android для File.length ()? - PullRequest
1 голос
/ 09 сентября 2011

Следующий код (на самом деле не написанный мной) используется для записи данных файла wav через inputStream в AudioTrack Android (неважно для моего вопроса ...)

int bytesread = 0, ret = 0;
int size = (int) file.length();
at.play();
while (bytesread < size) {
    ret = in.read(byteData, 0, count);
    if (ret != -1) { // Write the byte array to the track
        at.write(byteData, 0, ret);
        bytesread += ret;
    }
}

Если вы используете класс Java File, вы можете использовать File.length(), чтобы проверить размер файла и увидеть, когда прекратить потоковую передачу / воспроизведение. Однако я сохранил свои аудиофайлы в андроиде Resources (R.raw.example), и чтобы открыть его, я использую:

 in = mResources.openRawResource(ResId);  

, что дает мне InputStream. Это делает меня неспособным использовать что-либо подобное File.length(), и поэтому я не знаю, когда файл был воспроизведен.

Кто-нибудь знает, как добиться чего-то похожего в первом примере?

1 Ответ

3 голосов
/ 09 сентября 2011

Попробуйте openRawResourceFd .Он должен возвращать AssetFileDescriptor , который имеет метод .getLength ().

...