Вот как я использовал круг прогрессбар для показа Download evolution next Download Manager - PullRequest
0 голосов
/ 30 марта 2020

Вот как я продолжил следить за загрузкой файла в индикаторе выполнения после Download Manager. На самом деле, я заполняю индикатор выполнения, представленный в моем обзоре утилит, в соответствии с эволюцией менеджера загрузок из панели уведомлений. Я не хотел использовать AsyncTask, вот что он дал.

    public void DownLoadFile(Context context , String fileName , String fileExtension, String DestinationDirectory, Uri uri ){
        final DownloadManager downloadManager = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
        DownloadManager.Request request = new DownloadManager.Request(uri);
        assert downloadManager != null;
        final long downloadId = downloadManager.enqueue(request);

        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalFilesDir(context,DestinationDirectory, fileName + fileExtension);

        new Thread(new Runnable() {

            @Override
            public void run() {

                boolean downloading = true;

                while (downloading) {

                    DownloadManager.Query q = new DownloadManager.Query();
                    q.setFilterById(downloadId);

                    Cursor cursor = downloadManager.query(q);
                    cursor.moveToFirst();
                    int bytes_downloaded = cursor.getInt(cursor
                            .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                    int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

                    if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                        downloading = false;
                    }

                    final int dl_progress = (int) ((bytes_downloaded * 100l) / bytes_total);

                    handler.post(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            progressBar.setProgress(dl_progress);
                            //tv.setText(pStatus + "%");
                            Log.d("DownLoding.." ," pourcent" +dl_progress );

                        }
                    });


                    //Log.d(Constants.MAIN_VIEW_ACTIVITY, statusMessage(cursor));
                    Log.d("Downloading.." , " compte " + dl_progress+"%") ;
                    cursor.close();
                }

            }
        }).start();


        downloadManager.enqueue(request);
    }

private void Download(){

        final StorageReference ref2 = storageReference.child("/Audio/").child("new_audio0.mp3");
        ref2.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {

                DownLoadFile(context,"new_audio",".mp3",DIRECTORY_DOWNLOADS, uri);
                Log.i("URL_LINK", uri.toString());
                Toast.makeText(context, "En cours de télechargement..", Toast.LENGTH_SHORT).show();

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(context, "Le telechargement a échoué", Toast.LENGTH_SHORT).show();
            }
        });
    }

Drawable Circle 

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/secondaryProgress">
        <shape
            android:innerRadiusRatio="6"
            android:shape="ring"
            android:thicknessRatio="20.0"
            android:useLevel="true">


            <gradient
                android:centerColor="#999999"
                android:endColor="#999999"
                android:startColor="#999999"
                android:type="sweep" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <rotate
            android:fromDegrees="270"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="270">

            <shape
                android:innerRadiusRatio="6"
                android:shape="ring"
                android:thicknessRatio="20.0"
                android:useLevel="true">


                <rotate
                    android:fromDegrees="0"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:toDegrees="360" />

                <gradient
                    android:centerColor="#00FF00"
                    android:endColor="#00FF00"
                    android:startColor="#00FF00"
                    android:type="sweep" />

            </shape>
        </rotate>
    </item>
</layer-list>


Progressbar xml 

 <ProgressBar
            android:id="@+id/progressBa"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:visibility="gone"
            app:layout_constraintBaseline_toBaselineOf="@id/recordbtn"
            android:layout_marginRight="9dp"
            app:layout_constraintRight_toLeftOf="@+id/recordbtn"
            tools:layout_editor_absoluteY="16dp" />

Затем вызовите метод Download () в onClick.

это не обязательно лучший ответ, но он работает хорошо и избавил меня от использования AsyncTask: D

...