传祺系列解除行车中播放视频的限制(以GS5为例)

免责声明

本文仅作为研究,如若开车中出现任何问题,本人不进行负责

过程

控制代码开关

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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
.method public registerVehicleStatusListener()V
.locals 9

.prologue
const/4 v3, 0x1

const/4 v2, 0x0

.line 2748
const-string v0, "vehicle"

invoke-virtual {p0, v0}, Lgaei/video/main/MainActivity;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

move-result-object v0

check-cast v0, Landroid/vehicle/VehicleManager;

iput-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleManager:Landroid/vehicle/VehicleManager;

.line 2749
iget-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleManager:Landroid/vehicle/VehicleManager;

if-nez v0, :cond_0

.line 2750
const-string v0, "VideoActivity"

const-string v1, "registerVehicleStatusListener get vehicle manager is null!"

invoke-static {v0, v1}, Lgaei/video/util/LogUtils;->d(Ljava/lang/String;Ljava/lang/String;)V

.line 2788
:goto_0
return-void

.line 2753
:cond_0
iget-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleStatusListener:Lgaei/video/main/MainActivity$VehicleStatus;

if-nez v0, :cond_1

.line 2754
new-instance v0, Lgaei/video/main/MainActivity$VehicleStatus;

invoke-direct {v0, p0}, Lgaei/video/main/MainActivity$VehicleStatus;-><init>(Lgaei/video/main/MainActivity;)V

iput-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleStatusListener:Lgaei/video/main/MainActivity$VehicleStatus;

.line 2756
:cond_1
iget-object v0, p0, Lgaei/video/main/MainActivity;->mCheckVehicleStatusThread:Landroid/os/HandlerThread;

if-nez v0, :cond_2

.line 2757
new-instance v0, Landroid/os/HandlerThread;

const-string v1, "videoCheckVehicleThread"

invoke-direct {v0, v1}, Landroid/os/HandlerThread;-><init>(Ljava/lang/String;)V

iput-object v0, p0, Lgaei/video/main/MainActivity;->mCheckVehicleStatusThread:Landroid/os/HandlerThread;

.line 2758
iget-object v0, p0, Lgaei/video/main/MainActivity;->mCheckVehicleStatusThread:Landroid/os/HandlerThread;

invoke-virtual {v0}, Landroid/os/HandlerThread;->start()V

.line 2761
:cond_2
iput-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsEngineStatus:Z

.line 2762
iget-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleManager:Landroid/vehicle/VehicleManager;

const-class v1, Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc;

invoke-virtual {v0, v1}, Landroid/vehicle/VehicleManager;->getDefinedPacketCache(Ljava/lang/Class;)Landroid/vehicle/packets/NotifyPacket;

move-result-object v6

check-cast v6, Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc;

.line 2763
.local v6, "backacc":Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc;
if-nez v6, :cond_5

.line 2764
const-string v0, "VideoActivity"

const-string v1, "get fist backacc failed ,packet is null!"

invoke-static {v0, v1}, Lgaei/video/util/LogUtils;->d(Ljava/lang/String;Ljava/lang/String;)V

.line 2765
iput-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsEngineStatus:Z

.line 2772
:cond_3
:goto_1
iput-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsParkingLampStatus:Z

.line 2773
iget-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleManager:Landroid/vehicle/VehicleManager;

const-class v1, Landroid/vehicle/packets/notifyPackets/tboxinfo/ParkingLamp;

invoke-virtual {v0, v1}, Landroid/vehicle/VehicleManager;->getDefinedPacketCache(Ljava/lang/Class;)Landroid/vehicle/packets/NotifyPacket;

move-result-object v7

check-cast v7, Landroid/vehicle/packets/notifyPackets/tboxinfo/ParkingLamp;

.line 2774
.local v7, "parkinglamp":Landroid/vehicle/packets/notifyPackets/tboxinfo/ParkingLamp;
if-nez v7, :cond_7

.line 2775
const-string v0, "VideoActivity"

const-string v1, "get fist parkinglamp failed,packet is null\uff01"

invoke-static {v0, v1}, Lgaei/video/util/LogUtils;->d(Ljava/lang/String;Ljava/lang/String;)V

.line 2776
iput-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsParkingLampStatus:Z

.line 2781
:goto_2
iput-boolean v3, p0, Lgaei/video/main/MainActivity;->mIsVehicleCanPlayVideoFlag:Z

.line 2782
iget-boolean v0, p0, Lgaei/video/main/MainActivity;->mIsEngineStatus:Z

if-eqz v0, :cond_4

iget-boolean v0, p0, Lgaei/video/main/MainActivity;->mIsParkingLampStatus:Z

if-nez v0, :cond_4

.line 2783
iput-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsVehicleCanPlayVideoFlag:Z

.line 2785
:cond_4
const-string v0, "VideoActivity"

new-instance v1, Ljava/lang/StringBuilder;

invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

const-string v2, "registerVehicleStatusListener cur status = "

invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v1

iget-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsVehicleCanPlayVideoFlag:Z

invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;

move-result-object v1

invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v1

invoke-static {v0, v1}, Lgaei/video/util/LogUtils;->d(Ljava/lang/String;Ljava/lang/String;)V

.line 2787
iget-object v0, p0, Lgaei/video/main/MainActivity;->mVehicleManager:Landroid/vehicle/VehicleManager;

const/4 v1, 0x0

const-wide/16 v2, 0x0

iget-object v4, p0, Lgaei/video/main/MainActivity;->mVehicleStatusListener:Lgaei/video/main/MainActivity$VehicleStatus;

iget-object v5, p0, Lgaei/video/main/MainActivity;->mCheckVehicleStatusThread:Landroid/os/HandlerThread;

invoke-virtual {v5}, Landroid/os/HandlerThread;->getLooper()Landroid/os/Looper;

move-result-object v5

invoke-virtual/range {v0 .. v5}, Landroid/vehicle/VehicleManager;->requestVehicleDefinedUpdates(Ljava/lang/String;JLandroid/vehicle/listeners/VehicleListenerBase;Landroid/os/Looper;)V

goto/16 :goto_0

.line 2767
.end local v7 # "parkinglamp":Landroid/vehicle/packets/notifyPackets/tboxinfo/ParkingLamp;
:cond_5
invoke-virtual {v6}, Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc;->getKeyOnStatus()Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;

move-result-object v8

.line 2768
.local v8, "status":Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;
sget-object v0, Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;->ON:Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;

if-eq v8, v0, :cond_6

sget-object v0, Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;->CRANK:Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;

if-ne v8, v0, :cond_3

.line 2769
:cond_6
iput-boolean v3, p0, Lgaei/video/main/MainActivity;->mIsEngineStatus:Z

goto :goto_1

.line 2778
.end local v8 # "status":Landroid/vehicle/packets/notifyPackets/vehicleInfo/BackAcc$KEY_STATUS;
.restart local v7 # "parkinglamp":Landroid/vehicle/packets/notifyPackets/tboxinfo/ParkingLamp;
:cond_7
invoke-virtual {v7}, Landroid/vehicle/packets/notifyPackets/tboxinfo/ParkingLamp;->isVehicleBreakOn()Z

move-result v0

iput-boolean v0, p0, Lgaei/video/main/MainActivity;->mIsParkingLampStatus:Z

goto :goto_2
.end method

代码解释:

1
2
const/4 v3, 0x1 # 表示定义一个变量,代表true
const/4 v2, 0x0 #则为false

关键位置:

1
2
3
.line 2783
iput-boolean v2, p0, Lgaei/video/main/MainActivity;->mIsVehicleCanPlayVideoFlag:Z
#此处需要把V2改成v3即可,让mIsVehicleCanPlayVideoFlag的值为true

重新编译打包签名即可使用