我正在设计一个应用程序,我偶然发现了一个要求。
我的应用程序正在使用以下语法触发下载。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://openintents.googlecode.com/files/FileManager-2.0.2.apk"));
startActivity(intent);
上面的代码打开浏览器页面,然后开始下载。
我的要求是下载完成后我需要得到通知。
由于没有可用的广播会在浏览器完成下载时通知我,所以我使用了一些 hacky 的方法。
我用标志RecursiveFileObserver
来监视 SD 卡的内容。FileObserver.CLOSE_WRITE
我的计划是,一旦调用此事件,我会将路径内容与下载的文件名进行比较,并触发下一步操作。
但我面临的问题是 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();
}