如果应用程序被服务破坏,我如何保持下载文件运行(下载)?

用户2112245

如果应用程序被服务破坏,我如何保持下载文件运行(下载)? 我正在使用此链接下载视频并在后台下载文件,但问题是应用程序破坏下载已取消

现在我想知道如果应用程序被破坏,我如何继续运行下载文件

服务代码

public class DownloadService extends Service {
    private ThinDownloadManager downloadManager;
    private static final int DOWNLOAD_THREAD_POOL_SIZE = 4;
    RetryPolicy retryPolicy;


    public List<Integer> downloadIds;


    @Override
    public void onCreate() {
        super.onCreate();
        downloadManager = new ThinDownloadManager(DOWNLOAD_THREAD_POOL_SIZE);
        retryPolicy = new DefaultRetryPolicy(5000, 3, 2f);
        downloadIds = new ArrayList<>();


    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (intent != null) {
            Uri downloadUri = Uri.parse(intent.getStringExtra("url"));
            Uri filepath = Uri.parse(intent.getStringExtra("filepath"));
            Log.e("url", downloadUri.toString());
            Log.e("filepath", filepath.toString());
            startDownload(downloadUri, filepath);
        } else {
            Toast.makeText(this, "intent is null", Toast.LENGTH_SHORT).show();
        }

        return START_STICKY;


    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {

        return null;
    }


    public void startDownload(final Uri downloadUri, final Uri destinationUri) {
        try {
            int downloadId1 = (int) System.currentTimeMillis();

            final DownloadRequest downloadRequest = new DownloadRequest(downloadUri)
                    .setRetryPolicy(retryPolicy)
                    .setDestinationURI(destinationUri).setPriority(DownloadRequest.Priority.HIGH)
                    .setDownloadContext("Download")
                    .setStatusListener(new DownloadStatusListenerV1() {
                        @Override
                        public void onDownloadComplete(DownloadRequest downloadRequest) {

                            if (downloadIds != null && downloadIds.size() > 0) {
                                Log.e("complete", downloadRequest.toString());
                                Log.e("path", destinationUri + "");
                            }
                        }

                        @Override
                        public void onDownloadFailed(DownloadRequest downloadRequest, int errorCode, String errorMessage) {

                            if (downloadIds != null && downloadIds.size() > 0) {
                                Log.e("fail", downloadRequest.toString() + "  " + errorMessage);
                            }
                        }

                        @Override
                        public void onProgress(DownloadRequest downloadRequest, long totalBytes, long downloadedBytes, int progress) {

                            if (downloadIds != null && downloadIds.size() > 0) {
                                Log.e("progress", progress + " ");
                            }
                        }
                    });

            if (downloadManager.query(downloadId1) == DownloadManager.STATUS_NOT_FOUND) {
                downloadId1 = downloadManager.add(downloadRequest);
                downloadIds.add(downloadId1);

            }


        } catch (Exception e) {
            Log.e("catch", e.toString());
        }
    }

}

活动课

 Intent intent = new Intent(VideolIst.this, DownloadService.class);
        intent.putExtra("url", downloadUri.toString());
        intent.putExtra("filepath", destinationUri.toString());
        this.startService(intent);

在清单中也定义为 <service android:enabled="true" android:name="DownloadService" >

乌塔姆潘查萨拉

尝试通过返回START_REDELIVER_INTENT,因此将安排服务重新启动,并通过 onStartCommand 重新传递上次交付的 Intent。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if (intent != null) {
        Uri downloadUri = Uri.parse(intent.getStringExtra("url"));
        Uri filepath = Uri.parse(intent.getStringExtra("filepath"));
        Log.e("url", downloadUri.toString());
        Log.e("filepath", filepath.toString());
        startDownload(downloadUri, filepath);
    } else {
        Toast.makeText(this, "intent is null", Toast.LENGTH_SHORT).show();
    }

    return START_REDELIVER_INTENT; // change this
}

有关服务返回类型的更多信息,请阅读:https : //developer.android.com/reference/android/app/Service.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我的应用程序中的可下载文件

从 URL 下载文件的应用程序

如何通过REST从Jhipster应用程序下载文件?

用户从浏览器下载文件时,如何启动我的应用程序?

下载文件后Blazor服务器端应用程序死亡

从服务器下载文件时应用程序冻结

从服务器下载文件的GraphQL / Apollo应用程序

从闪亮的应用程序下载文件时如何设置您选择的文件名

Firefox下载种子使我没有打开它们的应用程序-只需打开下载文件夹

如何让我的应用程序创建/下载的文件显示在“文件”应用程序中?

如何在多页面应用程序中使用plotly-dash下载文件?

如何使用Azure逻辑应用程序操作在浏览器中下载文件

如何从OS X应用程序中的URL下载文件

如何从 Vue Web 应用程序中的 firebase 存储下载文件?

我应该使用 PHP readfile() 或 SFTP 连接通过网络应用程序从我的服务器下载文件吗?

每次下载文件时,如何使python程序自动运行?

从 Web 应用程序下载文件的问题 - ASP.NET Web 窗体应用程序

无法通过Heroku应用程序从AWS EC2 FTP服务器列出或下载文件

如何通过运行服务市场下载的应用程序路由器

如何构建将音频文件下载到本地文件夹或从Silverlight应用程序下载文件夹的功能?

如何将下载的文件(音频、文档)自动保存到 mac os x 沙盒应用程序中的用户下载文件夹?

我如何制作javascript下载文件?

如何使用python运行下载的外部应用程序

如何下载文件?

从Web应用程序下载文件时将页面的HTML代码写入文件

如何从我从手机上下载的应用程序获取图片文件?

我如何从asp.net核心Web应用程序中下载当天的Serilog日志文件?

如何从具有内容URI的云中下载我的应用程序中的文件

如何防止特定设备型号下载我的应用程序