从BroadcastReceiver对象访问类

时间:2014-10-22 15:34:24

标签: java android broadcastreceiver

我试图将一些代码添加到开源的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

1 个答案:

答案 0 :(得分:0)

我尝试和工作的想法(尽管它意味着对代码结构进行了根本性的更改)是,我将其重写为MyReceiver文件中的内部类,而不是将MyDownloadManager的代码编写为单独的文件。找到了。 我相信这不符合软件工程规则,但它确实有效!