After some and debug, I reach final solution for file trasfer just worked as expected
This is the solution worked for me:
1- make connection configuration:
public void setConnectionConfig(View view)
{
EditText editText = (EditText) findViewById(R.id.led_server_address);
HOST = editText.getText().toString();
SERVICE=HOST;
if(HOST.equals(""))
{
showMessage(âinvalid HOSTâ);
return;
}
XMPPConnection.DEBUG_ENABLED = true;
connConfig = new AndroidConnectionConfiguration(HOST, PORT, SERVICE);
Log.i(âonCreateâ,âCreating Connection Configuration DONE :-).â);
showMessage(âCreating Connection Configuration DONE :-).â);
connection = new XMPPConnection(connConfig);
Log.i(âmakeConnectionâ, âXMPP Connection Createdâ);
showMessage(âConnection Createdâ);
}
2- Make Connection:
//Create Connection to XMPP Server
public void makeConnection(View view)
{
if(connection==null)
{
Log.e(âmakeConnectionâ, âfirst configure connectionâ);
//showMessage(âfirst configure connectionâ);
return;
}
new Thread( new Runnable()
{
@Override
public void run() {
// TODO Auto-generated method stub
if(connection.isConnected())
{
Log.e(âmakeConnectionâ, "Already Connected to "+ connection.getHost());
//showMessage("Already Connected to "+ connection.getHost());
return ;
}
//connection already initialized outside
try {
Log.i(âmakeConnectionâ, âTry Make connectionâ);
//showMessage("Try Make connection to "+ connection.getHost());
connection.connect();
if(connection!=null && connection.isConnected())
{
Log.i(âmakeConnectionâ,âConnection Established! :-)â);
//showMessage("Connection Established to "+ connection.getHost());
}
} catch (XMPPException ex) {
Log.e(âmakeConnectionâ, "Failed to connect to "+ connection.getHost());
//showMessage("Failed to connect to "+ connection.getHost());
Log.e(âmakeConnectionâ, ex.toString());
}
return;
}
}
).start();
}
3- Login to Server:
//Login to XMPP Server
public void loginAccount(View view)
{
if(connection==null || !connection.isConnected())
{
Log.e(âloginAccountâ, " first try connect to Server: "+ HOST);
showMessage("First try connect to Server: "+HOST);
return;
}
/*
else if(!connection.getUser().equals(""))
{
Log.e(âloginAccountâ, " already connected as : "+ connection.getUser());
showMessage( " already connected as : "+ connection.getUser());
return;
}*/
EditText editText = (EditText) findViewById(R.id.led_username);
USERNAME = editText.getText().toString();
USERNAME+="@"+HOST;
editText = (EditText) findViewById(R.id.led_passwd);
PASSWORD = editText.getText().toString();
try {
connection.login(USERNAME,PASSWORD,âGapoGopFileTransferâ);
showMessage("Logined As â+USERNAME+â to "+connection.getHost());
Log.i(âloginAccountâ, "Logined As â+USERNAME+â to "+connection.getHost());
configure(ProviderManager.getInstance());
startListener(view);
} catch (XMPPException ex) {
Log.e(âloginAccountâ, "Failed to login to "+ connection.getHost());
Log.e(âloginAccountâ, ex.toString());
retry_times++;
if(retry_times>MAX_RETRY)
{
Log.e(âloginAccountâ, "max retries reached to connect "+ connection.getHost());
showMessage("Failed to login to "+connection.getHost());
retry_times=0;
}
else
loginAccount(view);
}
}
4- Here are 2 Assistant Methods I use:
public void configure(ProviderManager pm) {
// Private Data Storage
pm.addIQProvider(âqueryâ, âjabber:iq:privateâ,
new PrivateDataManager.PrivateDataIQProvider());
// Time
try {
pm.addIQProvider(âqueryâ, âjabber:iq:timeâ,
Class.forName(âorg.jivesoftware.smackx.packet.Timeâ));
} catch (ClassNotFoundException e) {
Log.w(âTestClientâ,
âCanât load class for org.jivesoftware.smackx.packet.Timeâ);
}
// Roster Exchange
pm.addExtensionProvider(âxâ, âjabber:x:rosterâ,
new RosterExchangeProvider());
// Message Events
pm.addExtensionProvider(âxâ, âjabber:x:eventâ,
new MessageEventProvider());
// Chat State
pm.addExtensionProvider(âactiveâ,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(âcomposingâ,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(âpausedâ,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(âinactiveâ,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
pm.addExtensionProvider(âgoneâ,
"[http://jabber.org/protocol/chatstates](http://jabber.org/protocol/chatstates)",
new ChatStateExtension.Provider());
// XHTML
pm.addExtensionProvider("html", "[http://jabber.org/protocol/xhtml-im](http://jabber.org/protocol/xhtml-im)",
new XHTMLExtensionProvider());
// Group Chat Invitations
pm.addExtensionProvider(âxâ, âjabber:x:conferenceâ,
new GroupChatInvitation.Provider());
// Service Discovery # Items
pm.addIQProvider("query", "[http://jabber.org/protocol/disco#items](http://jabber.org/protocol/disco#items)",
new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider("query", "[http://jabber.org/protocol/disco#info](http://jabber.org/protocol/disco#info)",
new DiscoverInfoProvider());
// Data Forms
pm.addExtensionProvider(âxâ, âjabber:x:dataâ, new DataFormProvider());
// MUC User
pm.addExtensionProvider("x", "[http://jabber.org/protocol/muc#user](http://jabber.org/protocol/muc#user)",
new MUCUserProvider());
// MUC Admin
pm.addIQProvider("query", "[http://jabber.org/protocol/muc#admin](http://jabber.org/protocol/muc#admin)",
new MUCAdminProvider());
// MUC Owner
pm.addIQProvider("query", "[http://jabber.org/protocol/muc#owner](http://jabber.org/protocol/muc#owner)",
new MUCOwnerProvider());
// Delayed Delivery
pm.addExtensionProvider(âxâ, âjabber:x:delayâ,
new DelayInformationProvider());
// Version
try {
pm.addIQProvider(âqueryâ, âjabber:iq:versionâ,
Class.forName(âorg.jivesoftware.smackx.packet.Versionâ));
} catch (ClassNotFoundException e) {
// Not sure whatâs happening here.
}
// VCard
pm.addIQProvider(âvCardâ, âvcard-tempâ, new VCardProvider());
// Offline Message Requests
pm.addIQProvider("offline", "[http://jabber.org/protocol/offline](http://jabber.org/protocol/offline)",
new OfflineMessageRequest.Provider());
// Offline Message Indicator
pm.addExtensionProvider(âofflineâ,
"[http://jabber.org/protocol/offline](http://jabber.org/protocol/offline)",
new OfflineMessageInfo.Provider());
// Last Activity
pm.addIQProvider(âqueryâ, âjabber:iq:lastâ, new LastActivity.Provider());
// User Search
pm.addIQProvider(âqueryâ, âjabber:iq:searchâ, new UserSearch.Provider());
// SharedGroupsInfo
pm.addIQProvider(âsharedgroupâ,
"[http://www.jivesoftware.org/protocol/sharedgroup](http://www.jivesoftware.org/protocol/sharedgroup)",
new SharedGroupsInfo.Provider());
// JEP-33: Extended Stanza Addressing
pm.addExtensionProvider(âaddressesâ,
"[http://jabber.org/protocol/address](http://jabber.org/protocol/address)",
new MultipleAddressesProvider());
// FileTransfer
pm.addIQProvider("si", "[http://jabber.org/protocol/si](http://jabber.org/protocol/si)",
new StreamInitiationProvider());
pm.addIQProvider("query", "[http://jabber.org/protocol/bytestreams](http://jabber.org/protocol/bytestreams)",
new BytestreamsProvider());
// Privacy
pm.addIQProvider(âqueryâ, âjabber:iq:privacyâ, new PrivacyProvider());
pm.addIQProvider("command", "[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider());
pm.addExtensionProvider(âmalformed-actionâ,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.MalformedActionError());
pm.addExtensionProvider(âbad-localeâ,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.BadLocaleError());
pm.addExtensionProvider(âbad-payloadâ,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.BadPayloadError());
pm.addExtensionProvider(âbad-sessionidâ,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.BadSessionIDError());
pm.addExtensionProvider(âsession-expiredâ,
"[http://jabber.org/protocol/commands](http://jabber.org/protocol/commands)",
new AdHocCommandDataProvider.SessionExpiredError());
}
void startListener(final View view)
{
FileTransferManager manager = new FileTransferManager(connection);
final Intent resultIntent = new Intent(this, FileTransferRequestActivity.class);
final IncomingFileTransferWrapper transferWrapper = new IncomingFileTransferWrapper();
manager.addFileTransferListener(new FileTransferListener()
{
@Override
public void fileTransferRequest(final FileTransferRequest request)
{
Log.i(âFileListenerâ,âIt Seems something is sent to me! :-Oâ);
final NotificationCompat.Builder mBuilder =new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle(âFileListenerâ)
.setContentText("File Transfer Request From â+request.getRequestor()+â - "+request.getFileName());
mNotificationId++;
// Gets an instance of the NotificationManager service
final NotificationManager mNotifyMgr =(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
final int myNotificatioID=mNotificationId;
mNotifyMgr.notify(myNotificatioID, mBuilder.build());
new Thread(){
@Override
public void run() {
int progressBarStatus=0;
Log.i(âFileListenerâ,âInside Thread Runâ);
//showMessage(âIt Seems something is sent to me! :-Oâ);
// startActivityForResult(resultIntent,FILE_TRANSFER_REQUEST_CODE);
File mf = Environment.getExternalStorageDirectory();
ReceivedFiledDirectory=Environment.getExternalStorageDirectory().getAbsolutePat h();
transferWrapper.transfer=request.accept();
try{
File file = new File(ReceivedFiledDirectory +"/"+ transferWrapper.transfer.getFileName());
ReceivedFiledDirectory="";
transferWrapper.transfer.recieveFile(file);
while(!transferWrapper.transfer.isDone())
{
try{
Thread.sleep(1000L);
}catch (Exception e) {
Log.e("", e.getMessage());
}
if(transferWrapper.transfer.getStatus().equals(Status.error)) {
Log.e("ERROR!!! ", transferWrapper.transfer.getError() + ââ);
}
if(transferWrapper.transfer.getException() != null) {
transferWrapper.transfer.getException().printStackTrace();
}
progressBarStatus=(int)(100 * transferWrapper.transfer.getProgress());
mBuilder.setProgress(100, progressBarStatus, false);
mBuilder.setContentTitle(transferWrapper.transfer.getFileName());
mBuilder.setContentText("%"+progressBarStatus+" Transfered");
// Builds the notification and issues it.
mNotifyMgr.notify(myNotificatioID, mBuilder.build());
}
// ok, file is downloaded,
if (progressBarStatus >= 100)
{
// sleep 2 seconds, so that you can see the 100%
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// When the loop is finished, updates the notification
mBuilder.setContentText(âTransfer completeâ)
// Removes the progress bar
.setProgress(0,0,false);
mNotifyMgr.notify(mNotificationId, mBuilder.build());
// close the progress bar dialog
//progressBar.dismiss();
}
}catch (Exception e) {
Log.e(âFile Transfer Listenerâ,âExit Threadâ);
}
};
}.start();
}
});
}
Please Like This Thread and Mark as Answered If this solution worked for you.
Iâll make a document of file transfer issues as soon as I have time.
Best Regards