0

重複の可能性:
ProgressDialog がアクティビティに表示されない

メイン クラスでは、new AutoUpdate().checkForUpdate(this); を呼び出します。

これがアクションです

public void checkForUpdate(Context context) {
        // check when last checked. unless overridden check once a day.

        // get current version
        int resID = context.getResources().getIdentifier("current_version",
                "string", context.getPackageName());
        currentVersion = context.getResources().getString(resID);

        // check for connection

        // now compare versions
        if (currentVersion.equals(serverVersion) == false) {
            ProgressDialog pDialog = new ProgressDialog(context);
            pDialog.setMessage("DO NOT ROTATE YOUR DEVICE. /nI am upgrading your version, press OK then INSTALL in a minute. Please wait....");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
            try {

                URL url = new URL(prefs.getString("server_address", null)
                        + "/updates/eduDroid.apk");
                HttpURLConnection c = (HttpURLConnection) url.openConnection();

                String PATH = Environment.getExternalStorageDirectory()
                        + "/download/";
                File file = new File(PATH);
                file.mkdirs();
                File outputFile = new File(file, "eduDroid.apk");
                FileOutputStream fos = new FileOutputStream(outputFile);

                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();

                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.fromFile(new File(Environment
                        .getExternalStorageDirectory()
                        + "/download/"
                        + "file.apk")),
                        "application/vnd.android.package-archive");
                context.startActivity(intent);

            } catch (IOException e) {
                Toast.makeText(context, "Update error!", Toast.LENGTH_LONG)
                        .show();
            }
            pDialog.dismiss();
        }

    }

問題は、更新されたバージョンのダウンロードに時間がかかることです。その間、ユーザーには空白の画面が表示されます。ダイアログボックスを表示したいのですが、表示されません。助けてください

4

2 に答える 2

0

Context をダイアログに渡すときに、handler または Runnable を使用して進行状況のダイアログと (this) の代わりに (ActivityName.this) を表示してみてください。

于 2012-11-14T12:53:44.303 に答える
0

を使用しAsyncTaskて、バックグラウンドでネットワーク処理を実行できます。

    if (currentVersion.equals(serverVersion) == false) {
        new AsyncTask<Void, Void, Void>() {

            private ProgressDialog pDialog;

            @Override
            protected void onPreExecute() {
                pDialog = new ProgressDialog(context);
                pDialog.setMessage("DO NOT ROTATE YOUR DEVICE. /nI am upgrading your version, press OK then INSTALL in a minute. Please wait....");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(true);
                pDialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                try {

                    URL url = new URL(prefs.getString("server_address",
                            null) + "/updates/eduDroid.apk");
                    HttpURLConnection c = (HttpURLConnection) url
                            .openConnection();

                    String PATH = Environment.getExternalStorageDirectory()
                            + "/download/";
                    File file = new File(PATH);
                    file.mkdirs();
                    File outputFile = new File(file, "eduDroid.apk");
                    FileOutputStream fos = new FileOutputStream(outputFile);

                    InputStream is = c.getInputStream();

                    byte[] buffer = new byte[1024];
                    int len1 = 0;
                    while ((len1 = is.read(buffer)) != -1) {
                        fos.write(buffer, 0, len1);
                    }
                    fos.close();
                    is.close();

                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(new File(Environment
                            .getExternalStorageDirectory()
                            + "/download/"
                            + "file.apk")),
                            "application/vnd.android.package-archive");
                    context.startActivity(intent);

                } catch (IOException e) {
                    Toast.makeText(context, "Update error!",
                            Toast.LENGTH_LONG).show();
                }
            }

            @Override
            protected void onPostExecute(Void result) {
                pDialog.dismiss();
            }
        }.execute();
    }
于 2012-11-14T12:35:06.167 に答える