You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
csamsclient/foreground/src/main/java/com/gyf/csams/MainApplication.kt

139 lines
4.5 KiB

package com.gyf.csams
import android.app.Activity
import android.app.Application
import android.app.NotificationManager
import android.os.Build
import android.os.Bundle
import androidx.lifecycle.MutableLiveData
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.util.CoilUtils
import com.baidu.location.BDAbstractLocationListener
import com.baidu.location.BDLocation
import com.baidu.location.LocationClient
import com.baidu.mapapi.SDKInitializer
import com.gyf.lib.util.NotificationUtil
import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.DiskLogAdapter
import com.orhanobut.logger.Logger
import okhttp3.OkHttpClient
class MainApplication : Application(), ImageLoaderFactory {
lateinit var mLocationClient: LocationClient
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(applicationContext)
.crossfade(true)
.okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(applicationContext))
.build()
}
.build()
}
override fun onCreate() {
super.onCreate()
//初始化日志
Logger.addLogAdapter(AndroidLogAdapter())
Logger.addLogAdapter(DiskLogAdapter())
//初始化百度地图SDK
mLocationClient = LocationClient(applicationContext)
mLocationClient.registerLocationListener(MyLocationListener)
Logger.i("${BuildConfig.foreground_app_name}启动")
SDKInitializer.initialize(this)
/**
* https://developer.android.com/training/notify-user/build-notification?hl=zh-cn#java
* 必须先通过向 createNotificationChannel() 传递 NotificationChannel 的实例在系统中注册应用的通知渠道,然后才能在 Android 8.0 及更高版本上提供通知
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
NotificationUtil.createNotificationChannel(
applicationContext,
NotificationManager.IMPORTANCE_DEFAULT
)
}
//Activity生命周期进行集中管理
registerActivityLifecycleCallbacks(MyCall)
}
}
/**
* 百度地图定位信息监听
*/
object MyLocationListener : BDAbstractLocationListener() {
val location = MutableLiveData<BDLocation>()
override fun onReceiveLocation(bdLocation: BDLocation?) {
bdLocation?.apply {
location.value = this
val sb = StringBuffer()
sb.append("time : ")
sb.append(time)
sb.append("\nerror code : ")
sb.append(locType)
sb.append("\nlatitude : ")
sb.append(latitude)
sb.append("\nlontitude : ")
sb.append(longitude)
sb.append("\nradius : ")
sb.append(radius)
when (locType) {
BDLocation.TypeCacheLocation -> {
sb.append("\nspeed : ")
sb.append(speed)
sb.append("\nsatellite : ")
sb.append(satelliteNumber)
sb.append("\ndirection : ")
sb.append("\naddr : ")
sb.append(addrStr)
sb.append(direction)
}
BDLocation.TypeNetWorkLocation -> {
sb.append("\naddr : ")
sb.append(addrStr)
}
}
Logger.i("BaiduLocationApiDem:$sb")
}
}
}
object MyCall : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
Logger.i("${activity::class.java.name}[onActivityCreated]")
}
override fun onActivityStarted(activity: Activity) {
Logger.i("${activity::class.java.name}[onActivityStarted]")
}
override fun onActivityResumed(activity: Activity) {
Logger.i("${activity::class.java.name}[onActivityResumed]")
}
override fun onActivityPaused(activity: Activity) {
Logger.i("${activity::class.java.name}[onActivityPaused]")
}
override fun onActivityStopped(activity: Activity) {
Logger.i("${activity::class.java.name}[onActivityStopped]")
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
Logger.i("${activity::class.java.name}[onActivitySaveInstanceState]")
}
override fun onActivityDestroyed(activity: Activity) {
Logger.i("${activity::class.java.name}[onActivityDestroyed]")
}
}