2016-10-24 13 views
0

Я хочу использовать sendFileMessage в sendbird api. Мне нужно значение файла, и я хочу использовать этот файл от drawable (или assets). sendBird APIСоздать файл из доступных для отправки с sendbird

это пропущено код из sendbird

Hashtable<String, Object> info = Helper.getFileInfo(getActivity(), uri); 
final String path = (String) info.get("path"); 
File file = new File(path); 
String name = file.getName(); 
String mime = (String) info.get("mime"); 
int size = (Integer) info.get("size"); 

sendFileMessage(file, name, mime, size, "", new BaseChannel.SendFileMessageHandler() { 
    public void onSent(FileMessage fileMessage, SendBirdException e) { 
     if (e != null) { 
      return; 
     } 
     mAdapter.appendMessage(fileMessage); 
     mAdapter.notifyDataSetChanged(); 
    } 
}); 

Этот код работает хорошо, который я получил uri от открытого намерения изображения. но я хочу использовать для других целей, и я хочу, чтобы заменить этот код

File file = new File(path); 

стать что-то вроде

File file = new File(<path or uri from drawable or assets>); 

Я попытался с uri

Uri uri = Uri.parse("android.resource://com.package.name/raw/filenameWithoutExtension"); 
File file = new File(uri.getPath()); 

с InputStream

try { 
    File f=new File("file name"); 
    InputStream inputStream = getResources().openRawResource(R.raw.myrawfile); 
    OutputStream out=new FileOutputStream(f); 
    byte buf[]=new byte[1024]; 
    int len; 
    while((len=inputStream.read(buf))>0) 
    out.write(buf,0,len); 
    out.close(); 
    inputStream.close(); 
} 
catch (IOException e){} 

всегда не удалось получить файл и код ошибки возврата ERR_REQUEST_FAILED 800220

ответ

0

Вы пробовали, как показано ниже?

String fileName = FILE_NAME; 
File cachedFile = new File(this.getActivity().getCacheDir(), fileName); 

try { 
    InputStream is = getResources().openRawResource(R.raw.sendbird_ic_launcher); 
    FileOutputStream fos = new FileOutputStream(cachedFile); 
    byte buf[] = new byte[1024]; 
    int len; 
    while ((len = is.read(buf)) > 0) 
     fos.write(buf, 0, len); 
     fos.close(); 
     is.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

groupChannel.sendFileMessage(cachedFile, fileName, "image/jpg", (int) cachedFile.length(), "", new BaseChannel.SendFileMessageHandler() { 
    @Override 
    public void onSent(FileMessage fileMessage, SendBirdException e) { 
    } 
}); 

Это работает для меня.

+0

большой. работаю, как я хочу. Спасибо. –