首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -使用DownloadManager下载后启动意图

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

Stack Overflow用户
提问于 2013-03-28 10:18:01
回答 1查看 3.1K关注 0票数 1

我有的是多个按钮。使用if-else语句,我将一个文件下载到相应的按钮。现在,我还在if-else语句中定义了要通过intent打开的类。我需要它,以便它将开始下载文件,然后开始一个新的活动。我过去常常使用AsyncTask来做这件事,并在onPostExecute中开始新的意图,但我认为使用DownloadManager更好。所以,你可能会感到困惑。所以我会通过我的代码来解释...

所以,我在这里设置所有的东西:

代码语言:javascript
复制
 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,并将一个字符串设置为一个类,另一个字符串设置为输出文件:

代码语言:javascript
复制
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);
            }

好的。所以所有的工作都很好。现在,我的showDownload:

代码语言:javascript
复制
public void showDownload(View view) {
    Intent i = new Intent();
    i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
    startActivity(i);

好的。现在,它下载了。所以,现在它正在下载,我需要开始一个新的活动。而且,我已经研究和尝试了一些东西,但都不起作用。如您所见,我已经在字符串中设置了一个类。我在onPostExecute中使用了下面的代码,所以我知道它工作得很好:

代码语言:javascript
复制
        try {
          Intent openNewIntent = new Intent(Bmod.this, Class.forName(className) );
          startActivity( openNewIntent );
        } catch (ClassNotFoundException e) {
          e.printStackTrace();
          }
        }

所以,我会重复我想要的。我想要下载一个文件,然后在执行下载之后,开始一个新的活动。任何帮助都是非常感谢的。谢谢!

编辑-以下是更新后的代码:

代码语言:javascript
复制
    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();
          }
}
EN

回答 1

Stack Overflow用户

发布于 2013-03-28 10:27:04

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15673114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档