2017-01-10 2 views
0

У меня есть файл, хранящийся в Android проекта, как это:Как найти правильный путь к файлу для assetManager.openFd()?

InputStream in = getResources().openRawResource(id); 
OutputStream out = new FileOutputStream(new File(dir, name)); 
ByteStreams.copy(in, out); 
out.flush(); 
out.close(); 

Где НАПРАВЛ: /data/user/0/com.aaa.app/files/media и зовут: my_file.

Но я получаю FileNotFoundException (брошенный из assetManager.openFd()) при попытке следующего:

private ParcelFileDescriptor getSeekableFileDescriptor() { 
    Context context = getContext(); 
    AssetManager assetManager = context.getAssets(); 
    AssetFileDescriptor assetFileDescriptor; 
    ParcelFileDescriptor fileDescriptor = null; 
    try { 
     assetFileDescriptor = assetManager.openFd("/data/user/0/com.aaa.app/files/media/my_file"); 
     fileDescriptor = assetFileDescriptor.getParcelFileDescriptor(); 
     return fileDescriptor; 
    } 
    catch (IOException e) { 
     Log.d(TAG, e.toString()); 
    } 
    return fileDescriptor; 
} 

Я также попытался прохождения следующего openFd():

"data/user/0/com.aaa.app/files/media/my_file", 
"/media/my_file", 
"media/my_file", 
"/my_file", 
"my_file" 

Затем я добавил «.pdf» к каждому из вышеперечисленных. Все еще нет успеха. Я получаю FileNotFound для каждого из вышеперечисленных.

+0

'AssetManager' предназначен для открытия активов. 'AssetFileDescriptor' предназначен для активов. Ваш файл не является активом. Почему вы пытаетесь создать 'AssetFileDescriptor'? – CommonsWare

+0

@CommonsWare В конечном счете, я пытаюсь сделать pdf-файл, используя: PdfRenderer renderer = новый PdfRenderer (getSeekableFileDescriptor()); Поэтому я пытаюсь вернуть ParcelFileDescriptor из метода getSeekableFileDescriptor(). Почему вы говорите, что мой файл не является активом? Я не понимаю различия. – Hap

ответ

1

Почему вы сказали, что мой файл не является активом?

Потому что это не актив. Актив является частью вашего приложения (например, src/main/assets/) и упакован в ваш APK.

Так что я пытаюсь получить ParcelFileDescriptor

Используйте open() on ParcelFileDescriptor открыть ParcelFileDescriptor на File.