即使我将一个活动更改为另一个活动,如何显示在服务后台更新的进度条

问题描述 投票:0回答:1

我需要有关下载进度栏的帮助。在我的应用程序中,有一个回收站视图,其中包含视频文件列表,每个项目都有一个圆圈进度栏和下载按钮。当我按下下载按钮时,应该使用进度条更新它并在后台运行。当我参加另一项活动并回到同一堂课时,如果下载未完成,则应该显示下载进度。请帮我。

  public class FeedsAdapterAudio extends 
  RecyclerView.Adapter<FeedsAdapterAudio.MyViewHolder> implements Filterable, 
 IDownload/*,MediaPlayer.OnCompletionListener, 
  SeekBar.OnSeekBarChangeListener*/ 
  {
  private List<RssFeed1> feedItems;
   private List<RssFeed1> feedlistfitered;
private Context context;
private int downloadedSize = 0;
private int totalSize = 0;
private String strurl;
NotificationManager mNotifyManager;
NotificationCompat.Builder mBuilder;
InputStream inputStream;
FileOutputStream fileOutput;
String strurl1;
SharedPreferences aspenPreference;
SharedPreferences.Editor aspenPrefsEditor;

public FeedsAdapterAudio(Context context, List<RssFeed1> feedItems){
    this.feedItems=feedItems;
    this.context=context;
    this.feedlistfitered = feedItems;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    aspenPreference = context.getSharedPreferences("tags", MODE_PRIVATE);
    aspenPrefsEditor = aspenPreference.edit();
    View view= LayoutInflater.from(context).inflate(R.layout.altitude_video_layout,parent,false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    try {
        String varid = aspenPreference.getString("tag",null);
        final RssFeed1 current=feedlistfitered.get(position);
        holder.title1.setText(current.getTitle());
        holder.desc.setText(Html.fromHtml(current.getDescription()));
        Glide.with(context)
                .load(current.getImage())
                .into(holder.imageView);

        holder.writername.setText(current.getKeywords());

        String str= current.getLink();
        strurl = str.substring(str.lastIndexOf("/") + 1);
        try {
            String path = Environment.getExternalStorageDirectory().toString()+"/cachefolder";
            //File cacheDir = getCacheFolder(context);
            final File file11 = new File(path,strurl);
            File file = new File(path);
            File files[] = file.listFiles();
            for (File file1 : files) {
                if (!file11.exists()) {
                    if (current.getLink().equals(varid)) {
                        holder.backblack.setVisibility(View.VISIBLE);
                        holder.beforedownload.setVisibility(View.VISIBLE);

                    } else {
                        holder.beforedownload.setVisibility(View.VISIBLE);
                        holder.afterdownload.setVisibility(View.GONE);
                        holder.backblack.setVisibility(View.GONE);
                    }
                } else {

                    holder.afterdownload.setVisibility(View.VISIBLE);
                    holder.beforedownload.setVisibility(View.GONE);
                    holder.backblack.setVisibility(View.GONE);


                        holder.playimage.setOnClickListener(view -> {
                            Intent intent = new Intent(context, AudioView.class);
                            intent.putExtra("videourl", file11.getAbsolutePath());
                            intent.putExtra("image",current.getImage());
                            intent.putExtra("type","filepath");
                            context.startActivity(intent);

                        });

                }

                }
        }
        catch (NullPointerException e)
        {System.out.print(e);}


        holder.stramplayimage.setOnClickListener(v -> {
            Intent intent = new Intent(context, AudioView.class);
            intent.putExtra("videourl",current.getLink());
            intent.putExtra("image",current.getImage());
            intent.putExtra("type","link");
            context.startActivity(intent);
        });

        holder.mydownloadsimage.setOnClickListener(v -> {
            MainFragment.switchTab(11);
        });

        holder.downloadimage.setOnClickListener(view -> {

            aspenPrefsEditor.putString("tag", current.getLink());
            aspenPrefsEditor.apply();

            holder.backblack.setVisibility(View.VISIBLE);

            SharedPreferences preferences = context.getSharedPreferences("altitude", MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();

            editor.putString("url", strurl);
            editor.putString("title", current.getTitle());
            editor.putString("image", current.getImage());
            editor.putString("desc",current.getDescription());
            editor.putString("writername",current.getKeywords());
            editor.putString("id",current.getGuid());
            editor.putString("type","audio");
            editor.apply();



            String channelId = context.getString(R.string.default_notification_channel_id);
            mBuilder = new  NotificationCompat.Builder(context, channelId)
                    .setSmallIcon(R.mipmap.icon)
                    .setContentTitle(current.getTitle())
                    .setAutoCancel(true);
            mNotifyManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
                mNotifyManager.createNotificationChannel(channel);
            }

            mNotifyManager.notify(0, mBuilder.build());

            new DownloadFileAsync(context,strurl, holder.donut_progress).execute(current.getLink());


        });
    }
    catch (IndexOutOfBoundsException e)
    {
        e.printStackTrace();
    }
}

@Override
public int getItemCount() {
    if (feedlistfitered == null)
        return 0;
    return feedlistfitered.size();
}

@Override
public void resultPathTrack(String url, String path) {

}

class MyViewHolder extends RecyclerView.ViewHolder {
    TextView title1, writername, desc;
    RelativeLayout download,playdelete,playlayout,giflayout;
    ImageView imageView, stramplayimage, downloadimage, playimage, mydownloadsimage, cancelimage;
    RelativeLayout image_layout;
    RelativeLayout video_layout, backblack;
    VideoView videoViewplay;
    ImageView buttonplay;
    ImageView delete;
    //ProgressBar gifimage;
    GifImageView gifimage;
    LinearLayout beforedownload, afterdownload;
    DonutProgress donut_progress;


    MyViewHolder(View itemView) {
        super(itemView);
        title1= itemView.findViewById(R.id.title1);
        desc= itemView.findViewById(R.id.desc);
        imageView= itemView.findViewById(R.id.imageview);
        download = itemView.findViewById(R.id.download);
        playdelete = itemView.findViewById(R.id.playdelete);
        buttonplay = itemView.findViewById(R.id.buttonplay);
        delete = itemView.findViewById(R.id.delete);
        writername = itemView.findViewById(R.id.writername);
        videoViewplay = itemView.findViewById(R.id.videoViewplay);
        playlayout = itemView.findViewById(R.id.playlayout);
        giflayout = itemView.findViewById(R.id.giflayout);
        gifimage = itemView.findViewById(R.id.gifimage);
        stramplayimage = itemView.findViewById(R.id.stramplayimage);
        downloadimage = itemView.findViewById(R.id.downloadimage);
        playimage = itemView.findViewById(R.id.playimage);
        mydownloadsimage = itemView.findViewById(R.id.mydownloadsimage);
        beforedownload = itemView.findViewById(R.id.beforedownload);
        afterdownload = itemView.findViewById(R.id.afterdownload);
        donut_progress = itemView.findViewById(R.id.donut_progress);
        cancelimage = itemView.findViewById(R.id.cancelimage);
        backblack = itemView.findViewById(R.id.backblack);
    }
}

 @SuppressLint("StaticFieldLeak")
 class DownloadFileAsync extends AsyncTask<String, String, String> {
    Context context;
    String url;
     DonutProgress donutProgress;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    DownloadFileAsync(Context context,String url,DonutProgress donutProgress){
        this.context=context;
        this.url = url;
        this.donutProgress = donutProgress;

    }

    @Override
    protected String doInBackground(String... aurl) {
        try {
            URL url = new URL(aurl[0]);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);

            urlConnection.connect();

            File cacheDir = getCacheFolder1(context);

            String str1= aurl[0];
            strurl1 = str1.substring(str1.lastIndexOf("/") + 1);
            File cacheFile = new File(cacheDir, strurl1);

            fileOutput = new FileOutputStream(cacheFile);

            inputStream = urlConnection.getInputStream();

            totalSize = urlConnection.getContentLength();


            byte[] buffer = new byte[256000000];
            int bufferLength = 0;

            while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                fileOutput.write(buffer, 0, bufferLength);
                downloadedSize += bufferLength;

                ((Activity) context).runOnUiThread(new Runnable() {
                    public void run() {
                        publishProgress(""+(int)((totalSize*100)/downloadedSize));
                    }
                });
            }
            fileOutput.close();

            fileOutput.flush();
            inputStream.close();
        } catch (Exception e) {}
        return null;

    }
    protected void onProgressUpdate(String... progress) {
        mBuilder.setProgress(totalSize,  downloadedSize, false);
        mNotifyManager.notify(0, mBuilder.build());
        donutProgress.setMax(100);
        donutProgress.setProgress((downloadedSize*100)/totalSize);
    }

    @Override
    protected void onPostExecute(String unused) {
        /*mBuilder.setContentText("Download complete");
        mBuilder.setProgress(0, 0, false);
        mNotifyManager.notify(0, mBuilder.build());*/
        notifyDataSetChanged();
        mNotifyManager.cancelAll();
        movefile(strurl1);
        SharedPreferences preferences = context.getSharedPreferences("tags", 0);
        preferences.edit().remove("tag").apply();

        SharedPreferences preferences1 = context.getSharedPreferences("altitude", MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences1.edit();


        String url = preferences1.getString("url", null);
        String image = preferences1.getString("image", null);
        String desc = preferences1.getString("desc", null);
        String writername = preferences1.getString("writername", null);
        String id = preferences1.getString("id", null);
        String type = preferences1.getString("type", null);
        String title = preferences1.getString("title", null);


        @SuppressLint("StaticFieldLeak")
        class SaveTask extends AsyncTask<Void, Void, Void> {

            @Override
            protected Void doInBackground(Void... voids) {

                AltitudeModel altitudeModel = new AltitudeModel();
                altitudeModel.setDescription(desc);
                altitudeModel.setGuid(id);
                altitudeModel.setImage(image);
                altitudeModel.setKeywords(writername);
                altitudeModel.setLink(url);
                altitudeModel.setTitle(title);
                altitudeModel.setType(type);

                DatabaseClient.getInstance(MyApplication.getContext()).getAppDatabase()
                        .altituteDao().insert(altitudeModel);
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                editor.clear();
            }
        }

        SaveTask st = new SaveTask();
        st.execute();
    }
}

private void movefile(String name)
{
    File from = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/cachefolder1/"+name);
    File to = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/cachefolder/"+name);
    from.renameTo(to);
}


private void showError(final String err){
    ((Activity) context).runOnUiThread(new Runnable() {
        public void run() {
            Toast.makeText(context, err, Toast.LENGTH_LONG).show();
        }
    });
}

private File getCacheFolder(Context context) {
    File cacheDir = null;
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        cacheDir = new File(Environment.getExternalStorageDirectory(), "cachefolder");
        if(!cacheDir.isDirectory()) {
            cacheDir.mkdirs();
        }
    }
    if(!cacheDir.isDirectory()) {
        cacheDir = context.getCacheDir();
    }

    return cacheDir;
}

private File getCacheFolder1(Context context) {
    File cacheDir = null;
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        cacheDir = new File(Environment.getExternalStorageDirectory(), "cachefolder1");
        if(!cacheDir.isDirectory()) {
            cacheDir.mkdirs();
        }
    }
    if(!cacheDir.isDirectory()) {
        cacheDir = context.getCacheDir();
    }

    return cacheDir;
}



@Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            String charString = charSequence.toString();
            if (charString.isEmpty()) {
                feedlistfitered = feedItems;
            } else {
                ArrayList<RssFeed1> filteredList = new ArrayList<>();
                for (RssFeed1 row : feedItems) {
                    if (row.getTitle().toLowerCase(Locale.getDefault()).contains(charSequence) || row.getKeywords().toLowerCase().contains(charSequence)) {
                        filteredList.add(row);
                    }
                }
                feedlistfitered = filteredList;
            }

            FilterResults filterResults = new FilterResults();
            filterResults.values = feedlistfitered;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            feedlistfitered = (ArrayList<RssFeed1>) filterResults.values;
            notifyDataSetChanged();
        }
    };
}}
android service android-recyclerview viewmodel recycler-adapter
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.