android — Android, как отправить и получить изображение и местоположение (с помощью карты) в групповом чате с помощью xmpp-smack" />

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

я разрабатываю приложение группового чата с использованием 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 = new FileTransferManager (Constants.connection);

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

Итак, как я могу получить доступ к этому классу файлов в моем классе?

Итак, как я могу поделиться (отправить-получить) изображением и сообщением о местоположении в чате?

Пожалуйста, помогите мне как можно скорее.

Заранее спасибо.

7 голосов | спросил Joseph Mekwan 22 J000000Wednesday15 2015, 08:57:12

2 ответа


0

попробуйте эту ссылку: ссылка

Для отправки файла

FileTransferManager manager = new FileTransferManager(connection);
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer('[email protected]/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();
    }
 });
ответил kiturk3 28 J000000Tuesday15 2015, 16:10:51
0

Класс FileTransferManager имеет getInstanceFor(XMPPConnection connection) чтобы получить экземпляр FileTransferManager. Просто предоставьте действительный XMPPConnecton. например.

FileTransferManager ftm = FileTransferManager.getInstanceFor(connection)

См. эту ссылку тоже.

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

ответил Joey 30 J000000Thursday15 2015, 05:37:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132