Я разрабатываю приложение для группового чата с помощью android–xmpp, в котором я не знаю, как отправлять и получать фотографии-изображения или местоположение (используя карту).
Так что любой из них может дать мне возможность сделать это.
В настоящее время я получил текстовое сообщение и добавил в список, как показано ниже,
Message msg = new Message(to, Message.Type.groupchat); msg.setBody(text); if (Constants.connection != null) { try { Constants.connection.sendPacket(msg); Log.d("Send to room : Name : ", to); Log.d("store", "store data to db"); //DBAdapter.addUserData(new UserData(text, "", "1" ,beam_id)); } catch (Exception e) { Log.d("ooo", "msg exception" + e.getMessage()); } messages.add(text); runOnUiThread(new Runnable() { public void run() { // set to listview setMyChatAdapter(); } }); }
И получать с помощью StanzaTypeFilter. Итак, как для совместного использования изображений и местоположений?
Я пытаюсь выполнить код для изображения с помощью FileTransferManager, используя smack-extensions-4.1.3-sources.jar .
private void sendImage() { FileTransferManager mg=new FileTransferManager(Constants.connection); OutgoingFileTransfer transfer = mg.createOutgoingFileTransfer(beam_id+"@"+Constants.conference_name + "/" + Constants.resources); File file = new File(selectedImagePath); try { transfer.sendFile(file, "test_file"); } catch (Exception e) { e.printStackTrace(); } while(!transfer.isDone()) { if(transfer.getStatus().equals(FileTransfer.Status.error)) { System.out.println("ERROR!!! " + transfer.getError()); } else if (transfer.getStatus().equals(FileTransfer.Status.cancelled) || transfer.getStatus().equals(FileTransfer.Status.refused)) { System.out.println("Cancelled!!! "+ transfer.getError()); } try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } if(transfer.getStatus().equals(FileTransfer.Status.refused) || transfer.getStatus().equals(FileTransfer.Status.error) || transfer.getStatus().equals(FileTransfer.Status.cancelled)){ System.out.println("refused cancelled error"+ transfer.getError()); } else { System.out.println("Success"); } }
Но когда я получаю доступ к этому файлу, используя следующие,
FileTransferManager mg = новый FileTransferManager (Constants.connection);
Он дает мне ошибку … имеет частный доступ … Итак, я нахожу, что конструктор этого файла является приватным, это файл jar, поэтому я не могу его изменить публично.
Итак, как я могу получить доступ к этому файловому классу в моем классе?
Итак, как я могу поделиться (отправить-получить) изображение и сообщение о местоположении в чате?
Пожалуйста, помогите мне как можно скорее.
Заранее спасибо.
Попробуйте эту ссылку: ссылку
Для отправки файла
FileTransferManager manager = new FileTransferManager(connection); OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer('usre2@myHost/Smack'); File file = new File(filenameWithPath); try { transfer.sendFile(file, 'test_file'); } catch (XMPPException e) { e.printStackTrace(); } while(!transfer.isDone()) { if(transfer.getStatus().equals(Status.error)) { System.out.println('ERROR!!! ' + transfer.getError()); } else if (transfer.getStatus().equals(Status.cancelled) || transfer.getStatus().equals(Status.refused)) { System.out.println('Cancelled!!! ' + transfer.getError()); } try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } if(transfer.getStatus().equals(Status.refused) || transfer.getStatus().equals(Status.error) || transfer.getStatus().equals(Status.cancelled)){ System.out.println('refused cancelled error ' + transfer.getError()); } else { System.out.println('Success'); }
Прием файлов:
FileTransferManager manager = new FileTransferManager(connection); manager.addFileTransferListener(new FileTransferListener() { public void fileTransferRequest(final FileTransferRequest request) { new Thread(){ @Override public void run() { IncomingFileTransfer transfer = request.accept(); File mf = Environment.getExternalStorageDirectory(); File file = new File(mf.getAbsoluteFile()+'/DCIM/Camera/' + transfer.getFileName()); try{ transfer.recieveFile(file); while(!transfer.isDone()) { try{ Thread.sleep(1000L); }catch (Exception e) { Log.e('', e.getMessage()); } if(transfer.getStatus().equals(Status.error)) { Log.e('ERROR!!! ', transfer.getError() + ''); } if(transfer.getException() != null) { transfer.getException().printStackTrace(); } } }catch (Exception e) { Log.e('', e.getMessage()); } }; }.start(); } });
Класс FileTransferManager
имеет getInstanceFor(XMPPConnection connection)
чтобы получить экземпляр FileTransferManager
. Просто укажите действительный XMPPConnecton. например
FileTransferManager ftm = FileTransferManager.getInstanceFor(connection)
См. Также эту ссылку FileTransferManager .
Надеюсь, это вам поможет.