lmw
2025-02-13 986709f6ba40e9f0a64a447105bcff4ca746c73c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.sinata.xqmuse
 
import android.app.Activity
import android.app.Application
import android.os.Bundle
import cn.sinata.xldutils.application.BaseApplication
import com.danikula.videocache.Logger
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.exo.ExoMediaPlayerFactory
import com.umeng.commonsdk.UMConfigure
import com.umeng.socialize.PlatformConfig
import org.greenrobot.eventbus.EventBus
import xyz.doikki.videoplayer.BuildConfig
import xyz.doikki.videoplayer.player.VideoViewConfig
import xyz.doikki.videoplayer.player.VideoViewManager
 
 
class XQApplication :BaseApplication(), Application.ActivityLifecycleCallbacks {
    override fun getSPName() = "JKSp"
 
    private val activities = ArrayList<Activity>()
    private var showNum = 0 //前台activity数量
 
    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(this)
    }
 
    /**
     * 隐私合规
     * 三方sdk延迟加载
     * */
    fun initSdk(){
//                DownloadLibrary.init(this, resources.getIdentifier("ic_launcher", "mipmap", packageName),null, packageName)
        UMConfigure.init(this, Const.UMENG_KEY, "", UMConfigure.DEVICE_TYPE_PHONE, "")
        UMConfigure.setLogEnabled(true)
        PlatformConfig.setWeixin(Const.WX_APP_ID, Const.WX_SECRET)
        initPlayer()
    }
 
    private fun initPlayer() {
        //播放器配置,注意:此为全局配置,按需开启
        VideoViewManager.setConfig(
            VideoViewConfig.newBuilder()
                .setLogEnabled(BuildConfig.DEBUG) //调试的时候请打开日志,方便排错
                /** 软解,支持格式较多,可通过自编译so扩展格式,结合 [xyz.doikki.dkplayer.widget.videoview.IjkVideoView] 使用更佳  */ //                .setPlayerFactory(IjkPlayerFactory.create())
                //                .setPlayerFactory(AndroidMediaPlayerFactory.create()) //不推荐使用,兼容性较差
                /** 硬解,支持格式看手机,请使用CpuInfoActivity检查手机支持的格式,结合 [xyz.doikki.dkplayer.widget.videoview.ExoVideoView] 使用更佳  */
 
//                .setPlayerFactory(ExoMediaPlayerFactory.create()) // 设置自己的渲染view,内部默认TextureView实现
                //                .setRenderViewFactory(SurfaceRenderViewFactory.create())
                // 根据手机重力感应自动切换横竖屏,默认false
                //                .setEnableOrientation(true)
                // 监听系统中其他播放器是否获取音频焦点,实现不与其他播放器同时播放的效果,默认true
                //                .setEnableAudioFocus(false)
                // 视频画面缩放模式,默认按视频宽高比居中显示在VideoView中
                //                .setScreenScaleType(VideoView.SCREEN_SCALE_MATCH_PARENT)
                // 适配刘海屏,默认true
                //                .setAdaptCutout(false)
                // 移动网络下提示用户会产生流量费用,默认不提示,
                // 如果要提示则设置成false并在控制器中监听STATE_START_ABORT状态,实现相关界面,具体可以参考PrepareView的实现
                //                .setPlayOnMobileNetwork(false)
                // 进度管理器,继承ProgressManager,实现自己的管理逻辑
                //                .setProgressManager(new ProgressManagerImpl())
//                .setPlayerFactory(AndroidMediaPlayerFactory.create())
//                .setPlayerFactory(IjkPlayerFactory.create())
                .setPlayerFactory(ExoMediaPlayerFactory.create())
                .build()
        )
 
//        if (BuildConfig.DEBUG) {
//            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
//            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
//        }
 
        // VideoCache 日志
 
//        if (BuildConfig.DEBUG) {
//            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
//            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build());
//        }
 
        // VideoCache 日志
        Logger.setDebug(BuildConfig.DEBUG)
    }
 
 
 
    /**
     * 关闭所有页面
     */
    fun exit(){
        activities.forEach {
            it.finish()
        }
    }
 
    companion object{ //全局配置
        var lat:Double? = null
        var lon:Double? = null
        var isForeground = true
        var appContext: XQApplication? = null
        var finishAnswer = false //完成答题后置为true,跳转到树苗打卡
        fun getInstance(): XQApplication? {
            if (appContext == null) {
                appContext = XQApplication()
            }
            return appContext
        }
    }
 
    override fun onActivityPaused(p0: Activity) {
 
    }
 
    override fun onActivityStarted(p0: Activity) {
        showNum++
        if (showNum == 1) {
            isForeground = true
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.APP_FOREGROUND))
        }
    }
 
    override fun onActivityDestroyed(p0: Activity) {
        activities.remove(p0)
    }
 
    override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {
    }
 
    override fun onActivityStopped(p0: Activity) {
        showNum--
        if (showNum == 0) {
            EventBus.getDefault().post(EmptyEvent(Const.EventCode.APP_BACKGROUND))
            isForeground = false
        }
    }
 
    override fun onActivityCreated(p0: Activity, p1: Bundle?) {
        activities.add(p0)
    }
 
    override fun onActivityResumed(p0: Activity) {
    }
}