puzhibing
2026-08-21 5fa94b3718b4a78a4fcea4c97652b0ef20b7de3a
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
147
148
149
150
151
152
153
154
package com.xw.yunwei.push
 
import android.content.Intent
import android.os.Bundle
import com.alibaba.sdk.android.push.AndroidPopupActivity
import com.blankj.utilcode.util.ActivityUtils.startActivity
import com.xw.common.Constants
import com.xw.common.utils.KeyPreferences
import com.xw.common.utils.MMKVManager
import com.xw.yunwei.model.SwitchTabMain
import com.xw.yunwei.model.SwitchTabTask
import com.xw.yunwei.push.MessageHandler.showProtocolDialog
import com.xw.yunwei.push.MessageHandler.showUpdateDialog
import com.xw.yunwei.ui.MainActivity
import com.xw.yunwei.ui.task.accident.detail.AccidentDetailActivity
import com.xw.yunwei.ui.task.normal.NormalTaskDetailActivity
import com.xw.yunwei.ui.user.login.LoginActivity
import com.xw.yunwei.ui.user.mine.protocol.ProtocolActivity
import com.xw.yunwei.ui.user.mine.scheduling.SchedulingActivity
import org.greenrobot.eventbus.EventBus
 
/**
 * 辅助弹窗Activity
 * 这个方案介绍的是自定义Activity作为中转Activity,辅助获取推送的额外参数,额外参数里必须配置指定Activity的路由信息,您可以根据这些路由信息跳转到指定Activity。
 * 如果您通过推送通知要打开的Activity页面较多的话,建议用这种方式。
 * 在推送时,配置的打开的页面要配置成实现的辅助弹窗中转Activity,且真正要打开的指定Activity路由信息需要配置在额外参数中。
 */
class PopupPushActivity : AndroidPopupActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
 
    /**
     * 实现通知打开回调方法,获取通知相关信息
     * @param title     标题
     * @param summary   内容
     * @param extMap    额外参数
     */
    override fun onSysNoticeOpened(title: String, summary: String, extMap: Map<String?, String?>?) {
        if (extMap.isNullOrEmpty()) {
            startActivity(LoginActivity::class.java)
            finish()
        } else {
            if (Constants.token.isEmpty()) {
                startActivity(LoginActivity::class.java)
                finish()
                return
            }
            /**
             * content:消息内容
             * strategy:推送策略 1=新增事故,2=事故即将超时提示,3=事故超时提示,4=排班信息变动,5=事故状态变更,6=新增任务,7=任务过期提示,8=版本更新提示,9=变更协议政策内容,10=变更协议内容并需用户授权,11=打卡成功通知, 12=强制升级
             * type:类型,事故需要,根据不同的id查询不同的事故详情 无-null 1=车辆检测 2=车辆充电 3=车辆整备 4=整备洗车 5=车辆维修 6=其他常规任务 7=事故任务
             * id:页面id(事故为事故id),无-null或0
             */
            val content = extMap["content"]
            val strategy = extMap["strategy"].toString().toIntOrNull() ?: 0
            val type = extMap["type"]
            val id = extMap["id"].toString()
            when (strategy) {
                1, 2, 3, 5 -> { // 1=新增事故,2=事故即将超时提示,3=事故超时提示,5=事故状态变更 点击都跳事故详情
                    startActivities(
                        arrayOf(
                            Intent(this, MainActivity::class.java),
                            Intent(this, AccidentDetailActivity::class.java).apply {
                                putExtra("taskId", id.toLong())
                            }
                        )
                    )
                    finish()
                }
 
                4 -> { // 排班信息变动
                    startActivities(
                        arrayOf(
                            Intent(this, MainActivity::class.java),
                            Intent(this, SchedulingActivity::class.java)
                        )
                    )
                    finish()
                }
 
                6, 7 -> { // 6=新增任务,7=任务过期提示  点击都跳任务详情
                    if (strategy == 6 && id == "0") { // 多条任务 跳转任务中心待处理页面
                        EventBus.getDefault().post(SwitchTabMain(1))
                        EventBus.getDefault().post(SwitchTabTask(2))
                        startActivity(MainActivity::class.java)
                    } else {
                        startActivities(
                            arrayOf(
                                Intent(this, MainActivity::class.java),
                                Intent(
                                    this,
                                    NormalTaskDetailActivity::class.java
                                ).apply {
                                    putExtra("taskId", id.toLong())
                                }
                            )
                        )
                    }
                    finish()
                }
 
                8, 12 -> { // 升级
                    showUpdateDialog(this)
                }
 
                9, 10 -> { // 变更协议内容
                    if (strategy == 9) {
                        startActivities(
                            arrayOf(
                                Intent(this, MainActivity::class.java),
                                Intent(this, ProtocolActivity::class.java)
                            )
                        )
                        finish()
                    } else {
                        MMKVManager.getInstance().saveBoolean(KeyPreferences.NEED_READ, true)
                        showProtocolDialog(this, true) {
                            startActivity(LoginActivity::class.java)
                            finish()
                        }
                    }
                }
 
                else -> {
                    startActivity(LoginActivity::class.java)
                    finish()
                }
            }
        }
    }
 
    /**
     * 不是推送数据的回调
     *
     * @param intent
     */
    override fun onNotPushData(intent: Intent) {
        super.onNotPushData(intent)
        startActivity(LoginActivity::class.java)
        finish()
    }
 
    /**
     * 是推送数据,但是又解密失败时的回调
     *
     * @param intent
     */
    override fun onParseFailed(intent: Intent) {
        super.onParseFailed(intent)
        startActivity(LoginActivity::class.java)
        finish()
    }
}