Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-下载后使用DownloadManager启动意图_Java_Android_Android Intent_Android Activity - Fatal编程技术网

Java Android-下载后使用DownloadManager启动意图

Java Android-下载后使用DownloadManager启动意图,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我有多个按钮。使用if-else语句,我将文件下载到相应的按钮。现在,我还在if-else语句中通过intent定义要打开的类。我需要有它,以便它将开始下载文件,然后开始一个新的活动。我曾经使用AsyncTask来完成这项工作,并在onPostExecute中启动新的intent,但我决定最好使用DownloadManager。所以,你可能会感到困惑。所以我会通过我的代码来解释 所以,在这里,我将全部设置: BroadcastReceiver receiver = new BroadcastR

我有多个按钮。使用if-else语句,我将文件下载到相应的按钮。现在,我还在if-else语句中通过intent定义要打开的类。我需要有它,以便它将开始下载文件,然后开始一个新的活动。我曾经使用AsyncTask来完成这项工作,并在onPostExecute中启动新的intent,但我决定最好使用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));
嗯。现在,在我的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);
            }
嗯。所以一切都很好。现在,我的节目下载:

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();
          }
}

将startActivity()调用放入广播接收器的onReceive()中,以便在通知接收器下载完成时启动活动。

将startActivity()调用放入广播接收器的onReceive()中,以便在通知接收器下载完成时启动活动。

确定。我不希望它在开始上课之前等待下载完成。我希望在应用程序的其余部分运行时下载它。啊,那么不要执行showDownload()只需启动您的活动。下载管理器将在后台运行,下载完成后将调用您的接收器。您不必显示下载,就可以下载。如果启动DownloadManager.ACTION\u VIEW\u DOWNLOADS活动,则该活动将控制。确定。我试试看。如果有效的话,我会接受你的回答谢谢试过了。因为某种原因没有工作。。。检查更新的op以了解我使用的代码。确定。我不希望它在开始上课之前等待下载完成。我希望在应用程序的其余部分运行时下载它。啊,那么不要执行showDownload()只需启动您的活动。下载管理器将在后台运行,下载完成后将调用您的接收器。您不必显示下载,就可以下载。如果启动DownloadManager.ACTION\u VIEW\u DOWNLOADS活动,则该活动将控制。确定。我试试看。如果有效的话,我会接受你的回答谢谢试过了。因为某种原因没有工作。。。检查我使用的代码的更新op。