浏览器下载通知已完成

时间:2012-12-26 13:52:27

标签: android broadcastreceiver webclient-download

我正在设计一个应用程序,我偶然发现了一个要求。

我的应用程序使用以下语法解雇下载。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://openintents.googlecode.com/files/FileManager-2.0.2.apk"));

startActivity(intent);

上面的代码打开浏览器页面,然后开始下载。

我的要求是我需要在下载完成后收到通知。

由于没有广播可用,当浏览器完成下载时会通知我,我使用了一些hacky方法。

我正在使用RecursiveFileObserver来监控带有FileObserver.CLOSE_WRITE标记的SD卡内容。

我的计划是,一旦调用此事件,我将比较路径内容和下载的文件名,并触发下一步操作。

但我遇到的问题是FileObserver.CLOSE_WRITE被多次调用,它会因设备而异。

我的问题是,是否有任何API或解决方法可以在浏览器完成下载后通知我?

以下是我尝试过的代码段。

Intent intent = new Intent(
Intent.ACTION_VIEW,
Uri.parse("http://openintents.googlecode.com/files/FileManager-2.0.2.apk"));

startActivity(intent);

myObserver = new RecursiveFileObserver(Environment.getExternalStorageDirectory().getAbsolutePath()) {

    @Override
    public void onEvent(int event, String path) {

        if (event == FileObserver.CLOSE_WRITE) {

            if (path.indexOf("FileManager") != -1) {
                Log.i("vipul", "CLOSE_WRITE: " + path);

                /*
                 * Intent intent = new Intent(Intent.ACTION_VIEW);
                 * intent.setDataAndType(Uri.fromFile(new File(path)),
                 * "application/vnd.android.package-archive");
                 * startActivity(intent);
                 */

            }

        }
    }

};

myObserver.startWatching();

}

@Override
protected void onDestroy() {

    if (installReceiver != null) {
        myObserver.stopWatching();
        unregisterReceiver(installReceiver);
        installReceiver = null;

    }
    super.onDestroy();
}

1 个答案:

答案 0 :(得分:0)

您可以使用自己的服务执行下载,并在开始使用getContentLength()并跟踪下载的部件大小之前,通过获取文件大小来跟踪进度。