1

私が持っているのは複数のボタンです。if-else ステートメントを使用して、対応するボタンにファイルをダウンロードします。ここで、if-else ステートメントのインテントを介して開くクラスも定義します。ファイルのダウンロードを開始してから新しいアクティビティを開始できるようにする必要があります。以前は AsyncTask でこれを行い、onPostExecute で新しいインテントを開始していましたが、DownloadManager を使用する方がよいと判断しました。だから、あなたは混乱するかもしれません。だから私は私のコードを通して説明します...

だから、ここで私はそれをすべて設定しています:

 BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                    long downloadId = intent.getLongExtra(
                            DownloadManager.EXTRA_DOWNLOAD_ID, 0);
                    Query query = new Query();
                    query.setFilterById(enqueue);
                    Cursor c = dm.query(query);
                    if (c.moveToFirst()) {
                        int columnIndex = c
                                .getColumnIndex(DownloadManager.COLUMN_STATUS);
                        if (DownloadManager.STATUS_SUCCESSFUL == c
                                .getInt(columnIndex)) {
                            String uriString = c
                                    .getString(c
                                            .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                        }
                    }
                }
            }
        };

        registerReceiver(receiver, new IntentFilter(
                DownloadManager.ACTION_DOWNLOAD_COMPLETE));

Ok。ここで、if-else でダウンロードする URL を宣言し、クラスに等しい文字列と出力ファイルに等しい別の文字列を設定します。

if (andy != null){
                className = "com.cydeon.plasmamodz.Softkeys";
                fileName = "batterymod.zip";
                dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                Request req = new Request(
                        Uri.parse("https://dl.dropbox.com/s/gfukrwqy4xqrnj9/Android.zip"));
                req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
                        fileName);
                enqueue = dm.enqueue(req);
            }

Ok。だから、すべてうまくいきます。今、私のショーのダウンロード:

public void showDownload(View view) {
    Intent i = new Intent();
    i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
    startActivity(i);

良い。では、ダウンロードします。これでダウンロードが完了しました。新しいアクティビティを開始する必要があります。そして、私はいくつかのことを調査して試しましたが、何も機能しません。ご覧のとおり、文字列内に既にクラスを設定しています。onPostExecute で使用したこのコードがあるので、正常に動作することがわかります。

        try {
          Intent openNewIntent = new Intent(Bmod.this, Class.forName(className) );
          startActivity( openNewIntent );
        } catch (ClassNotFoundException e) {
          e.printStackTrace();
          }
        }

だから、私は私が望むものを繰り返します。ファイルをダウンロードし、ダウンロードを実行した後、新しいアクティビティを開始したいと考えています。どんな助けでも大歓迎です。ありがとう!

編集 - 更新されたコードは次のとおりです。

    public void showDownload(View view) {
    Context context = getApplicationContext();
    CharSequence text = "Download complete";
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    try {
          Intent openNewIntent = new Intent(Bmod.this, Class.forName(className) );
          startActivity( openNewIntent );
        } catch (ClassNotFoundException e) {
          e.printStackTrace();
          }
}
4

1 に答える 1

1

startActivity() 呼び出しをブロードキャスト レシーバーの onReceive() に配置して、レシーバーがダウンロードの完了を通知されたときにアクティビティが開始されるようにします。

于 2013-03-28T02:27:03.877 に答える