第一行代码(第二版) 断点下载代码修正


ServiceBestPractice

第二版的代码需要修改两处,第一处位于DownloadService.java中的getNotification()方法

private Notification getNotification(String title, int progress) {
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("download_service", "前台Service通知", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
        }
        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "download_service");
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setContentIntent(pi);
        builder.setContentTitle(title);
        if (progress > 0) {
            // 当progress 大于或等于0时才需要显示下载进度
            builder.setContentText(progress + "%");
            builder.setProgress(100, progress, false);
        }
        return builder.build();
    }

第二处是权限声明,位于AndroidManifest.xml中,加入这一行

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

流程分析

  1. 调用MainActivityonCreate()方法,绑定布局以及按钮,按钮开始监听点击事件,绑定DownloadService服务
  2. 绑定DownloadService服务时,会调用onBind()方法,返回一个绑定器实例downloadBinder
  3. MainActicityServiceConnection会在服务可连接时调用onServiceConnected获取到downloadBinder实例
  4. 监视到点击事件的时候, 会设置下载地址url并且调用downloadBinderstartDownload(url)方法
  5. startDownload方法中新建downloadTask实例并执行,然后在前台通知正在下载,Toast同步推送“正在下载”的消息
  6. downloadTask执行doInBackground()方法开始下载

坑点

  1. 断点下载的代码粗心写错了,导致无法断点下载。

文章作者: Hiper
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hiper !
  目录