Java 下载完成后如何创建事件触发器

Java 下载完成后如何创建事件触发器,java,android,eventtrigger,Java,Android,Eventtrigger,我正在写一个下载管理器,我需要一个提示。在那里,我可以创建一个事件,在我想要的时候随时启动它。但我似乎找不到在java中如何做到这一点。我要做的是为我的类创建一个事件,然后在类的一个成员方法中激发它。现在,当调用该类并看到下载已完成(例如,某个变量已达到100)时,它将触发一个事件,指示该情况。我如何用java创建它? public class DownloadManager { static Queue<AvailableGame> downloadQu

我正在写一个下载管理器,我需要一个提示。在那里,我可以创建一个事件,在我想要的时候随时启动它。但我似乎找不到在java中如何做到这一点。我要做的是为我的类创建一个事件,然后在类的一个成员方法中激发它。现在,当调用该类并看到下载已完成(例如,某个变量已达到100)时,它将触发一个事件,指示该情况。我如何用java创建它?

public class DownloadManager
    {
        static Queue<AvailableGame> downloadQueue;
        static Integer currenProgress;
        static String currentDownload;
        static Boolean isRunning;


        /**
         * Start download
         */
        public void startDownloading()
        {

            AsyncTask task = new AsyncTask()
            {
                @Override
                protected Object doInBackground(Object[] objects)
                {
                    downloadNextFile();
                    return null;

        private static String downloadFile(String downloadUrl)
        {
            String toDownload = downloadUrl;
            String fileName = getFileNameFromUrl(toDownload);

            // take CPU lock to prevent CPU from going off if the user
            // presses the power button during download
            PowerManager pm = (PowerManager)
            MainActivity.getContext().getSystemService(Context.POWER_SERVICE); 
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
            "DownloadManager");
            wl.acquire();

            try
            {
                InputStream input = null;
                OutputStream output = null;
                HttpURLConnection connection = null;
                try
                {
                    URL url = new URL(toDownload);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.connect();

                    // expect HTTP 200 OK, so we don't mistakenly save error report
                    // instead of the file
                    if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
                    {
                        return "Server returned HTTP " + connection.getResponseCode() + " "
                        + connection.getResponseMessage();
                    }    

                    int fileLength = connection.getContentLength();

                    // download the file
                    input = connection.getInputStream();
                    output = new FileOutputStream("/sdcard/" + fileName);

                    byte data[] = new byte[4096];
                    long total = 0;
                    int count;
                    while ((count = input.read(data)) != -1)
                    {
                        total += count;
                        // publishing the progress....
                        if (fileLength > 0)
                        {
                            currenProgress = ((int) (total * 100 / fileLength));
                            currentDownload = "Downloading " + fileName;
                        }
                        output.write(data, 0, count);
                    }
                }
                catch (Exception e)
                {
                    return e.toString();
                }
                finally
                {
                    try
                    {
                        if (output != null)
                        {
                            output.close();
                        }
                        if (input != null)
                        {
                            input.close();
                        }
                    }
                    catch (IOException ignored)
                    {
                    }

                    if (connection != null)
                    {
                        connection.disconnect();
                    }
                }
            }
            finally
            {
                wl.release();
            }
            return null;
        }   


    }

公共类下载管理器
{
静态队列下载队列;
静态整数电流进程;
静态字符串下载;
静态布尔运算;
/**
*开始下载
*/
公共无效开始下载()
{
AsyncTask任务=新建AsyncTask()
{
@凌驾
受保护对象doInBackground(对象[]对象)
{
下载nextfile();
返回null;
私有静态字符串下载文件(字符串下载URL)
{
字符串toDownload=downloadUrl;
字符串文件名=getFileNameFromUrl(toDownload);
//如果用户
//下载时按下电源按钮
PowerManager pm=(PowerManager)
MainActivity.getContext().getSystemService(Context.POWER\u服务);
PowerManager.WakeLock wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
“下载管理器”);
wl.acquire();
尝试
{
InputStream输入=null;
OutputStream输出=null;
HttpURLConnection=null;
尝试
{
URL=新URL(toDownload);
connection=(HttpURLConnection)url.openConnection();
connection.connect();
//希望HTTP 200正常,这样我们就不会错误地保存错误报告
//而不是文件
if(connection.getResponseCode()!=HttpURLConnection.HTTP\u确定)
{
return“服务器返回HTTP”+连接。getResponseCode()+“”
+connection.getResponseMessage();
}    
int fileLength=connection.getContentLength();
//下载该文件
输入=连接。getInputStream();
输出=新文件输出流(“/sdcard/”+文件名);
字节数据[]=新字节[4096];
长总计=0;
整数计数;
而((计数=输入。读取(数据))!=-1)
{
总数+=计数;
//发布进度。。。。
如果(文件长度>0)
{
currenProgress=((int)(总计*100/文件长度));
currentDownload=“Downloading”+文件名;
}
输出.写入(数据,0,计数);
}
}
捕获(例外e)
{
返回e.toString();
}
最后
{
尝试
{
if(输出!=null)
{
output.close();
}
如果(输入!=null)
{
input.close();
}
}
捕获(忽略IOException)
{
}
if(连接!=null)
{
连接断开();
}
}
}
最后
{
wl.释放();
}
返回null;
}   
}

下载完成后如何保存信息,第二个问题是如何


首先,我认为你应该使用安卓系统。如果你是,你可以注册一个
BroadcastReceiver
,它可以检测下载完成的时间

有一个完整的示例,您可以下载并在手机上运行,其中包含完整的源代码,以了解如何做到这一点:

具体检查文件和文件

希望能有帮助