如何使用翻新Android取消下载?

时间:2019-05-16 17:33:54

标签: android retrofit retrofit2 android-download-manager

我有一个应用程序,可以使用Retrofit从服务器上下载文件.....在我的xml布局上,如果单击两个按钮,它们会发送不同的参数以下载不同的文件 这部分工作正常,我单击一个,程序开始忽略文件和其他按钮,当第一个文件完成时,它将下载第二个文件。我也有一个 取消按钮(取消下载)的问题是,取消按钮只能使用一次,我认为是因为每次它创建一个具有其ID的新“下载”。

因此,如果我单击下载1,然后下载2,然后单击取消,那么我只能取消下载2。

我的问题是,可以确定要取消的文件吗?

    <Button
        android:id="@+id/btn_download"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="128dp"
        android:layout_marginLeft="128dp"
        android:layout_marginTop="36dp"
        android:text="Download"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_download2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="128dp"
        android:layout_marginLeft="128dp"
        android:layout_marginTop="124dp"
        android:text="Download 2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <Button
        android:id="@+id/btn_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="140dp"
        android:layout_marginLeft="140dp"
        android:layout_marginTop="196dp"

        android:text="Cancel"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />



 private void downloadFile(final String fileName, String f_id, final String id) {
        Retrofit.Builder builder = new Retrofit.Builder().baseUrl("mywebsite/api/")
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create());
        Retrofit retrofit = builder.build();

        FileDownloadClient fileDownloadClient = retrofit.create(FileDownloadClient.class);

        final String fileName = fileName;
        final String f_id   = f_id;

        Map<String, Object> postdata = new HashMap<>();
        postdata.put("Parametros", "aquii")
        postdata.put("Parametros", "aquii")
        postdata.put("Parametros", "aquii")

        final Call<ResponseBody> call = fileDownloadClient.downloadFileStream(postdata);

        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {

                    sendOnChannel2("Download", "Download in progress", 2000, id);

                    new AsyncTask<Void, Void, Void>() {
                        @Override
                        protected Void doInBackground(Void... voids) {
                            boolean success = writeResponseBodyToDisk(response.body(), fileName, id);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    cancelButton.setVisibility(View.GONE);
                                    Toast.makeText(MainActivity.this, "Download Complete", Toast.LENGTH_LONG).show();
                                }
                            });
                            return null;
                        }
                    }.execute();
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                if(call.isCanceled()) {
                    Toast.makeText(MainActivity.this, "Request Cancelled :( ", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(MainActivity.this, "Download failed :(", Toast.LENGTH_LONG).show();
                }
            }
        });

        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                call.cancel();
                cancelNotification("Download", "Download cancelled", 0, id);
            }
        });
    }

0 个答案:

没有答案