diff --git a/app/build.gradle b/app/build.gradle index d953902daf..4448b972e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -261,6 +261,8 @@ dependencies { implementation "cn.jzvd:jiaozivideoplayer:${jiaoziVideoView}" implementation "com.danikula:videocache:${videoCache}" + implementation "android.arch.work:work-runtime:${workManager}" + implementation "com.llew.huawei:verifier:1.0.6" implementation 'com.ethanhua:skeleton:1.1.1' diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 1b78be042f..1865c94842 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -8,9 +8,10 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.preference.PreferenceManager; +import android.text.TextUtils; + import androidx.annotation.Nullable; import androidx.collection.ArrayMap; -import android.text.TextUtils; import com.gh.common.exposure.ExposureEvent; import com.gh.common.util.AppDebugConfig; @@ -19,6 +20,7 @@ import com.gh.common.util.DialogUtils; import com.gh.common.util.GdtHelper; import com.gh.common.util.MD5Utils; import com.gh.common.util.MtaHelper; +import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.GameEntity; @@ -89,6 +91,7 @@ public class DownloadManager implements DownloadStatusListener { downloadingMap.put(entity.getUrl(), entity); + DownloadWorkManager.addWorker(); } @Override @@ -112,6 +115,10 @@ public class DownloadManager implements DownloadStatusListener { DownloadNotification.showDownloadingNotification(mContext); DownloadNotification.showDownloadDoneNotification(mContext, entity); downloadingMap.remove(entity.getUrl()); + + if (downloadingMap.isEmpty()) { + DownloadWorkManager.cancelWorker(); + } } @Override @@ -583,6 +590,23 @@ public class DownloadManager implements DownloadStatusListener { mContext.startService(serviceIntent); } } + + public void checkRetryDownload() { + if (!NetworkUtils.isWifiConnected(mContext)) return; + + for (DownloadEntity downloadEntity : DownloadManager.getInstance(mContext).getAll()) { + if (DownloadStatus.neterror.equals(downloadEntity.getStatus()) || + DownloadStatus.timeout.equals(downloadEntity.getStatus()) || + DownloadStatus.subscribe.equals(downloadEntity.getStatus())) { + DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(), System.currentTimeMillis()); + Message msg = Message.obtain(); + msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; + msg.obj = downloadEntity.getUrl(); + DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000); + } + Utils.log("checkRetryDownload::" + downloadEntity.getStatus()); + } + } // // public void removeObservers() { // Utils.log(DownloadManager.class.getSimpleName(), "removeObserver"); diff --git a/app/src/main/java/com/gh/download/DownloadWorkManager.kt b/app/src/main/java/com/gh/download/DownloadWorkManager.kt new file mode 100644 index 0000000000..e7300ddf1d --- /dev/null +++ b/app/src/main/java/com/gh/download/DownloadWorkManager.kt @@ -0,0 +1,33 @@ +package com.gh.download + +import androidx.work.PeriodicWorkRequest +import androidx.work.WorkManager +import java.util.concurrent.TimeUnit + +object DownloadWorkManager { + + private const val TAG_DOWNLOAD = "tag_download" + + @JvmStatic + fun addWorker() { + cancelWorker() + + // 每 15 分钟检查一下是否需要重试下载 + val builder = PeriodicWorkRequest.Builder( + DownloadWorker::class.java, + PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, + TimeUnit.MILLISECONDS) + + val workerRequest = builder + .addTag(TAG_DOWNLOAD) + .build() + + WorkManager.getInstance().enqueue(workerRequest) + } + + @JvmStatic + fun cancelWorker() { + WorkManager.getInstance().cancelAllWork() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/download/DownloadWorker.kt b/app/src/main/java/com/gh/download/DownloadWorker.kt new file mode 100644 index 0000000000..1ad8c8cad1 --- /dev/null +++ b/app/src/main/java/com/gh/download/DownloadWorker.kt @@ -0,0 +1,17 @@ +package com.gh.download + +import android.content.Context +import androidx.work.Worker +import androidx.work.WorkerParameters +import com.lightgame.utils.Utils + +class DownloadWorker(private val mContext: Context, workerParams: WorkerParameters) + : Worker(mContext, workerParams) { + + override fun doWork(): Result { + DownloadManager.getInstance(mContext).checkRetryDownload() + Utils.log("Let's try checkRetryDownload.") + return Result.success() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index cdb19a7160..8680fa0c12 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -12,7 +12,6 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.os.Message; import android.os.SystemClock; import android.preference.PreferenceManager; import android.text.TextUtils; @@ -49,7 +48,6 @@ import com.gh.common.util.GsonUtils; import com.gh.common.util.LogUtils; import com.gh.common.util.LunchType; import com.gh.common.util.MtaHelper; -import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PlatformUtils; import com.gh.common.util.PushHelper; @@ -85,12 +83,10 @@ import com.google.gson.reflect.TypeToken; import com.halo.assistant.HaloApp; import com.lightgame.config.CommonDebug; import com.lightgame.download.DataWatcher; -import com.lightgame.download.DownloadConfig; import com.lightgame.download.DownloadEntity; import com.lightgame.download.DownloadStatus; import com.lightgame.download.FileUtils; import com.lightgame.utils.Util_System_Phone_State; -import com.lightgame.utils.Utils; import com.tencent.bugly.beta.tinker.TinkerManager; import com.tencent.bugly.crashreport.CrashReport; @@ -583,20 +579,7 @@ public class MainActivity extends BaseActivity { } private void checkRetryDownload() { - if (!NetworkUtils.isWifiConnected(this)) return; - - for (DownloadEntity downloadEntity : DownloadManager.getInstance(this).getAll()) { - if (DownloadStatus.neterror.equals(downloadEntity.getStatus()) || - DownloadStatus.timeout.equals(downloadEntity.getStatus()) || - DownloadStatus.subscribe.equals(downloadEntity.getStatus())) { - DownloadManager.getInstance(this).put(downloadEntity.getUrl(), System.currentTimeMillis()); - Message msg = Message.obtain(); - msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK; - msg.obj = downloadEntity.getUrl(); - DownloadManager.getInstance(getApplicationContext()).sendMessageDelayed(msg, 1000); - } - Utils.log("checkRetryDownload::" + downloadEntity.getStatus()); - } + DownloadManager.getInstance(this).checkRetryDownload(); } private void checkTinkerPath() { diff --git a/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt b/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt index 4f1e77641a..dffb18cb8b 100644 --- a/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/download/DownloadFragment.kt @@ -80,6 +80,12 @@ class DownloadFragment : BaseFragment_TabLayout() { } } + override fun onResume() { + super.onResume() + + DownloadManager.getInstance(requireContext()).checkRetryDownload() + } + override fun onPageSelected(index: Int) { EventBus.getDefault().post(EBUISwitch(DownloadManagerActivity.TAG, index)) diff --git a/app/src/main/java/com/gh/gamecenter/receiver/NetworkStateReceiver.java b/app/src/main/java/com/gh/gamecenter/receiver/NetworkStateReceiver.java index af07df52d1..41658a8acc 100644 --- a/app/src/main/java/com/gh/gamecenter/receiver/NetworkStateReceiver.java +++ b/app/src/main/java/com/gh/gamecenter/receiver/NetworkStateReceiver.java @@ -22,7 +22,6 @@ public class NetworkStateReceiver extends BroadcastReceiver { EventBus.getDefault().post(new EBNetworkState(NetworkUtils.isNetworkConnected(context))); MetaUtil.INSTANCE.refreshMeta(); ReservationRepository.refreshReservationsIfNeeded(); - // 初始化开启的社区列表 if (NetworkUtils.isNetworkConnected(context)) { NotificationManager manager = (NotificationManager) context.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); if (manager != null) { diff --git a/dependencies.gradle b/dependencies.gradle index 58475df3ab..223ad8d70e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -24,6 +24,7 @@ ext { recyclerView = "1.0.0" lifeCycle = "2.0.0" room = "2.0.0" + workManager = "1.0.1" material = "1.0.0"