我试图将一些代码添加到开源的android下载管理器库中,我遇到了一个问题。此代码包含一个名为DownloadManager的类,可以同时下载。因为我希望我的代码一次只下载一个文件,并将其余的文件保存在队列中并将其传递给DownloadManager类,因为我们已经完成了早期的编写,我编写了自己的类来扩展DownloadManager。我还必须编写另一个类MyReceiver来接收下载完整的广播,所以我知道何时开始下载下一个文件。 问题是我想在调用OnReceive()方法后传递下一个文件,但我无法访问类DownloadManager的属性。另外,我无法在Receiver类中创建此类的新对象,因为它的构造函数需要ContentResolver对象作为参数。
以下是我的扩展DownloadManager类的代码:
public class MyDownloadManager extends DownloadManager {
public ArrayList<Request> list;
public boolean activeDownloadExists;
public MyDownloadManager(ContentResolver resolver, String packageName) {
super(resolver, packageName);
list = new ArrayList<DownloadManager.Request>();
activeDownloadExists = false;
}
public void addToWaitingList(Request request) {
if (!activeDownloadExists) {
enqueue(request);
activeDownloadExists = true;
} else
list.add(request);
}
}
这是MyReceiver类的代码:
public class MyReceiver extends BroadcastReceiver {
public ArrayList<Request> list;
public boolean activeDownloadExists;
public IntentFilter filter;
@Override
public void onReceive(Context context, Intent intent) {
Log.d("OnReceive" , "Received");
}
}
我所谈到的开源可以在这里找到:https://github.com/yxl/DownloadProvider
答案 0 :(得分:0)
我尝试和工作的想法(尽管它意味着对代码结构进行了根本性的更改)是,我将其重写为MyReceiver文件中的内部类,而不是将MyDownloadManager的代码编写为单独的文件。找到了。 我相信这不符合软件工程规则,但它确实有效!