code: public static void sendAttachmentFile(final InputStream is, final String mimeType) {
  		dispatchConversationTask(new ConversationDispatchTask() {
  			@Override
  			protected boolean execute(Conversation conversation) {
  				if (is == null) {
  					return false; // TODO: add error message
  				}
  				CompoundMessage message = new CompoundMessage();
  				// No body, just attachment
  				message.setBody(null);
  				message.setRead(true);
  				message.setHidden(true);
  				message.setSenderId(conversation.getPerson().getId());
  
  				ArrayList<StoredFile> attachmentStoredFiles = new ArrayList<StoredFile>();
  				String localFilePath = Util.generateCacheFilePathFromNonceOrPrefix(ApptentiveInternal.getInstance().getApplicationContext(), message.getNonce(), null);
  
  				String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);
  				if (!TextUtils.isEmpty(extension)) {
  					localFilePath += "." + extension;
  				}
  				// When created from InputStream, there is no source file uri or path, thus just use the cache file path
  				StoredFile storedFile = Util.createLocalStoredFile(is, localFilePath, localFilePath, mimeType);
  				if (storedFile == null) {
  					return false; // TODO: add error message
  				}
  				storedFile.setId(message.getNonce());
  				attachmentStoredFiles.add(storedFile);
  
  				message.setAssociatedFiles(attachmentStoredFiles);
  				conversation.getMessageManager().sendMessage(message);
  				return true;
  			}
  		}, "add unread message listener");
  	}
docs: Sends a file to the server. This file will be visible in the conversation view on the server, but will not be shown
  in the client's Message Center. A local copy of this file will be made until the message is transmitted, at which
  point the temporary file will be deleted.
  
  @param is       An InputStream from the desired file.
  @param mimeType The mime type of the file.