Android как отправлять и получать изображение и местоположение (используя карту) в групповом чате с помощью xmpp-smack

Я разрабатываю приложение для группового чата с помощью androidxmpp, в котором я не знаю, как отправлять и получать фотографии-изображения или местоположение (используя карту).

Так что любой из них может дать мне возможность сделать это.

В настоящее время я получил текстовое сообщение и добавил в список, как показано ниже,

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 .

Надеюсь, это вам поможет.