Скачивание и установка APK - PullRequest
       0

Скачивание и установка APK

0 голосов
/ 17 января 2012

Я сделал код, который загружает APK с ftp, и пытаюсь установить его после загрузки. Я написал это для Сота, поэтому в каждом соединении я должен использовать темы. Как я могу использовать startActivity в классе в потоке или ждать завершения потока?

public class FTPapkDowload {
protected static final String TAG = "Tablet Development";
public FTPClient mFTPClient = null;
public FTPClient mFtp = null;

public void Start() {

Thread apkdowload = new Thread(new Runnable() {
        @Override
        public void run() {

            ftpConnect("mysite", "username", "password",21);
            Log.d(TAG, "Connected");
            ftpDownload("/httpdocs/Shamir/app.apk", "sdcard/Download/app.apk");
            ftpDisconnect();

            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/Download/" + "app.apk")), "application/vnd.android.package-archive");
            startActivity(intent); //Here is the problem


        }

        //Connection
        public boolean ftpConnect(String host, String username,
                String password, int port) {
            try {

                mFTPClient = new FTPClient();
                mFTPClient.connect(host, port); 

                if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
                    boolean status = mFTPClient.login(username, password);

                    mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
                    mFTPClient.enterLocalPassiveMode();
                    return status;
                }
            } catch (Exception e) {
                Log.d(TAG, "Error: could not connect to host " + host);
            }

            return false;
        }


        //Downloading
        public boolean ftpDownload(String srcFilePath, String desFilePath) {
            boolean status = false;
            try {

                FileOutputStream desFileStream = new FileOutputStream(
                        desFilePath);
                status = mFTPClient
                        .retrieveFile(srcFilePath, desFileStream);
                desFileStream.close();
                return status;
            } catch (Exception e) {
                Log.d(TAG, "download failed");
            }

            return status;
        }



        public boolean ftpDisconnect() {

            try {
                mFTPClient.logout();
                mFTPClient.disconnect();
                Log.d(TAG, "Disconected from FTP on apk Download");

                return true;
            } catch (Exception e) {
                Log.d(TAG,"Error occurred while disconnecting from ftp server on apk download.");
            }

            return false;
        }

    });

    apkdowload.start();
}

}

Ответы [ 4 ]

1 голос
/ 17 января 2012

Вы можете использовать обработчик:

private Handler handler = new Handler(){
        public void handleMessage(Message msg)
        {

        }
    };

Когда ваш поток завершит выполнение кода, он должен вызвать: handler.sendEmptyMessage(0);

Подробнее: http://developer.android.com/reference/android/os/Handler.html

0 голосов
/ 17 января 2012

Чтобы выполнить методы пользовательского интерфейса, вы запустили это в потоке пользовательского интерфейса:

Поместите это в свой обычный поток Запустите метод ():

       YourClass.this.runOnUiThread(new Runnable() {
           @Override
           public void run() {

               startyourActivity();
           }
       });
0 голосов
/ 17 января 2012

Полагаю, вам нужно передать контекст вашей деятельности в класс, в котором вы хотите использовать методы действия.

0 голосов
/ 17 января 2012

Самый простой способ сделать это - загрузить код FTP, чтобы уведомить основной поток о завершении и выполнить основной (UI) поток, вызывающий startActivity. Вы можете сделать это, используя любое количество методов для связи между потоками, например, обработчик:

http://developer.android.com/reference/android/os/Handler.html

Или просто Activity.runOnUiThread:

http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

Хорошая статья в блоге "Painless Threading":

http://android -developers.blogspot.com / 2009/05 / безболезненным-threading.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...