2013-11-27 2 views
1

У меня возникли проблемы с использованием карт из недавно выпущенного GDK. В принципе, Card.addImage() может принимать только два аргумента, идентификатор ресурса или URI.Установка изображения Google Glass Card с ошибкой URI файла

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

String fileName = step.attachment; //of the form, "folder1/images/image1.jpg" 
File outFile = new File(getFilesDir()+File.separator+fileName); 
FileChannel inputChannel = null; 
FileChannel outputChannel = null; 

try { 
    //check to see if the file has already been cached in internal storage before copying 
    if(!outFile.exists()) { 
     FileInputStream inputStream = new FileInputStream(getAssets().openFd(fileName).getFileDescriptor()); 
     FileOutputStream outputStream = openFileOutput(fileName, Context.MODE_PRIVATE); 
     inputChannel = inputStream.getChannel(); 
     outputChannel = outputStream.getChannel(); 
     outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); 

    } 

} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
finally{ 
try { 
    if(inputChannel!=null) 
     inputChannel.close(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    if(outputChannel!=null) 
     outputChannel.close(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

} 
card.addImage(Uri.fromFile(outFile)); 

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

+0

Хорошо, это дует мой разум. Я изменил выходной каталог изображений на/sdcard /, чтобы я мог видеть, правильно ли копируются изображения. Все они были огромными, и все одинаковые размеры, 103 МБ. Это по совпадению тот же размер, что и мой APK (я собираю в него много контента для тестирования). Я открыл файл в 7zip, и это мой apk! Что тут происходит? Как я скопировал приложение? – csrussell

ответ

0

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

InputStream in = null; 
OutputStream out = null; 
try { 
    in = getAssets().open(step.attachment); 
    out = new FileOutputStream(outFile); 
byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
    in.close(); 
    in = null; 
    out.flush(); 
    out.close(); 
    out = null; 
} catch(IOException e) { 
    Log.e("tag", "Failed to copy asset file: " + step.attachment, e); 
} 

Это мне не ясно, почему/как я копировал всю свою APK, но я предполагаю, что это призыв к

getAssets().openFd(fileName).getFileDescriptor() 

Возможно, это был файл дескриптора apk. Это странно, потому что я видел некоторые утверждения о том, что предыдущий метод работает.

0

Вместо того чтобы писать

new FileInputStream(getAssets().openFd(fileName).getFileDescriptor()); 

вы можете попробовать

getAssets().openFd(fileName).createInputStream(); 

и посмотреть, работает ли он?

Чтобы ответить на ваш первоначальный вопрос, метод addImage поддерживает resource: и file: URI.

+0

Я действительно пробовал это, прежде чем видеть ваше предложение. Это, похоже, делает трюк, хотя мне кажется любопытным, что получение дескриптора файла актива возвращает файловый дескриптор apk. На самом деле я видел, как я копировал файлы в качестве предлагаемого метода здесь: http://stackoverflow.com/questions/4447477/android-how-to-copy-files-in-assets-to-sdcard – csrussell

 Смежные вопросы

  • Нет связанных вопросов^_^