Ok, the answer was in front of my face. I was using the ABFTP library instead of the FTP library. Although I think the ABFTP offers some better error handling, the FTP library offers the information about the files on the FTP host, such as timestamp and size. With this information and the File.LastModified (you can find out the date of the current .apk) Then with the FTP lib:
you connect:
myFTP.Initialize("MyFTP", txtFtp, txtPort, txtLogin, txtPassword)
Then you get a list of files from the FTP location:
MyFtp.List(FTPFileLocation)
This causes an event ..._ListCompleted to fire when the list is complete
Sub MyFTP_ListCompleted (ServerPath As String, Success As Boolean, Folders() As FTPEntry, Files() As FTPEntry)
dim APKDate as long
APKDate = File.LastModified("...my APK in my location..") 'get the date of the current .apk for comparison later
For i = 0 To Files.Length - 1 'roll through the list
Log(Files(i).Name & " size:" & files(i).Size & " date:" & datetime.dateparse(Files(i).Timestamp,False))
If ..my APK name.. = files(i).Name then ' it is the same .apk
If APKDate < Files(i).Timestamp Then ' it is newer than the one we have
...the file is newer do stuff here, like install the new .apk file
End if
End if
Next
This is event driven, so when you ask for a list, it doesn't come right back, you have to wait for a list complete event (the program keeps running and the event then fires) the ABFTP you get the list and process it without events.
This works very well but you have to keep things going while the events get ready and fire.