增加离线地图下载流程
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package com.navinfo.omqs.http.offlinemapdownload
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Environment
|
||||
import android.text.TextUtils
|
||||
import com.navinfo.omqs.Constant
|
||||
import com.navinfo.omqs.bean.OfflineMapCityBean
|
||||
import dagger.hilt.android.qualifiers.ActivityContext
|
||||
import java.io.Serializable
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* 管理离线地图下载
|
||||
*/
|
||||
class OfflineMapDownloadManager @Inject constructor(@ActivityContext context: Context) {
|
||||
/**
|
||||
* 最多同时下载数量
|
||||
*/
|
||||
private val MAX_SCOPE = 5
|
||||
|
||||
/**
|
||||
* 存储有哪些城市需要下载
|
||||
*/
|
||||
private val scopeMap: ConcurrentHashMap<String, OfflineMapDownloadScope> by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
ConcurrentHashMap<String, OfflineMapDownloadScope>()
|
||||
}
|
||||
|
||||
val downloadFolder: String? by lazy {
|
||||
Constant.MAP_PATH + "/offline/"
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 请求一个下载任务[OfflineMapDownloadScope]
|
||||
* 这是创建[OfflineMapDownloadScope]的唯一途径,请不要通过其他方式创建[OfflineMapDownloadScope]
|
||||
*/
|
||||
fun request(cityBean: OfflineMapCityBean): OfflineMapDownloadScope? {
|
||||
//没有下载连接的不能下载
|
||||
if (TextUtils.isEmpty(cityBean.url)) return null
|
||||
// if(scopeMap.containsKey())
|
||||
var downloadScope = scopeMap[cityBean.id]
|
||||
if (downloadScope == null) {
|
||||
scopeMap[cityBean.id] = OfflineMapDownloadScope(cityBean)
|
||||
}
|
||||
return downloadScope
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.navinfo.omqs.http.offlinemapdownload
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.navinfo.omqs.bean.OfflineMapCityBean
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
|
||||
/**
|
||||
* 代表一个下载任务
|
||||
* [OfflineMapCityBean.id]将做为下载任务的唯一标识
|
||||
* 不要直接在外部直接创建此对象,那样就可能无法统一管理下载任务,请通过[OfflineMapDownloadManager.download]获取此对象
|
||||
* 这是一个协程作用域,
|
||||
* EmptyCoroutineContext 表示一个不包含任何元素的协程上下文,它通常用于创建新的协程上下文,或者作为协程上下文的基础。
|
||||
*/
|
||||
class OfflineMapDownloadScope(cityBean: OfflineMapCityBean) : CoroutineScope by CoroutineScope(EmptyCoroutineContext) {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private var downloadJob: Job? = null
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private val downloadData = MutableLiveData<OfflineMapCityBean>()
|
||||
}
|
||||
Reference in New Issue
Block a user