2015-07-22 18 views
8

sviluppo l'app di chat di gruppo utilizzando android-xmpp, nel senso che non so come inviare e ricevere immagini-immagine o posizione (usando la mappa).android come inviare e ricevere immagine e posizione (utilizzando la mappa) nella chat di gruppo utilizzando xmpp-smack

Quindi chiunque può darmi modo di farlo.

attualmente, ho ottenuto un messaggio di testo e aggiungere alla lista di vista, come seguire,

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(); 
     } 
    }); 
} 

e ricevere usando StanzaTypeFilter. Quindi, come per l'immagine e la condivisione della posizione?

Provo il codice seguente per l'immagine utilizzando FileTransferManager, utilizzando 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"); 
    } 
} 

Ma quando accedo il file utilizzando seguito,

FileTransferManager Mg = new FileTransferManager (Constants.connection);

che mi dia errore ... ha un accesso privato di ... Quindi, trovo costruttore di quel file è privata, questo è il file jar quindi non posso cambiarlo a pubblico.

Quindi, come posso accedere a quella classe di file nella mia classe?

Quindi, come posso condividere (inviare-ricevere) immagine e messaggio di posizione in chat?

Per favore aiutatemi il prima possibile.

Grazie in anticipo.

risposta

3

provare questo link: reference

Per File inviare

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'); 
} 

File Receive:

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(); 
    } 
}); 
+0

ciao @ kiturk3 conosco questo codice, ma come accedere se ** FileTransferManager ** ha un accesso privato, che ho chiaro menzione nella mia domanda. –

+2

Questa interfaccia è stata modificata. Ora devi chiamare FileTransferManager.getInstance (Connection) –

+0

che il mio file non invia. ho ottenuto System.out.println ('refused cancelled error' + transfer.getError()); Puoi dirmi quali dovrebbero essere le cause – Rajat

1

La classe FileTransferManager hanno getInstanceFor(XMPPConnection connection) per ottenere l'istanza del FileTransferManager. Basta fornire una connessione XMPPC valida. per esempio.

FileTransferManager ftm = FileTransferManager.getInstanceFor(connection)

Vedi questo link FileTransferManager troppo.

Spero che questo ti aiuti.

+0

Come per il collegamento doc FileTransferManager utilizza EntityFullJid.Significa che funzionerà anche per l'invio in camera? – Killer

+0

@Killer non ho provato questo tipo di approccio. Ma sembra che questo FileTransferManager funzioni per l'approccio 1-a-1. Puoi provare a controllare questo link [Out of Band Data] (https://xmpp.org/extensions/xep-0066.html) – Joey

Problemi correlati