层级冲突处理
定义了Android层级的冲突策略,通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS 广播来解决系统层面的浮层隐藏和显示。
private static final String KEY_REASON = "reason";
public static void broadcastCloseSystemDialog(Context context, String reason) {
try {
Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
if (!TextUtils.isEmpty(reason)) {
intent.putExtra(KEY_REASON, reason);
}
context.sendBroadcastAsUser(intent, UserHandle.CURRENT);
} catch (Exception e) {
Log.e(TAG, "broadcastCloseSystemDialog", e);
}
}需要发广播的场景
📊 内嵌表格:需要发广播的场景明细(sheetId=uET5KA)
SystemUI
有弹窗报警出来disableVoice, 报警结束enableVoice @蔡智明
并且发生ACTION_CLOSE_SYSTEM_DIALOGS, reason 为”warning”
有通知出来发送下面ACTION_CLOSE_SYSTEM_DIALOGS广播 heads_up_notification @Jimmy Sun 孙强
监听ACTION_CLOSE_SYSTEM_DIALOGS广播
隐藏快控 @Yue5 Liu 刘越
background_start_app、avm、mirror 隐藏appdrawer @Yue5 Liu 刘越
语音
@伍仪华
监听广播ACTION_CLOSE_SYSTEM_DIALOGS
隐藏大卡片,防止遮挡
监听ACTION_OTA_STATUS_CHANGE
开始OTA 自己禁用OTA , 结束后启用语音
快控场景
快空未出现,下拉时,需要能让快控出来,并且语音弹窗消失
后台启动应用
发送广播
broadcastCloseSystemDialog(Context context, "background_start_app");禁用语音
语音通过SettingProvider , 语音监听该值,自己禁用
public static String DISABLE_VOICE_ASSISTANT = "mi_disable_voice_assistant"
public static void disableVoice() {
Settings.Global.putInt(null, DISABLE_VOICE_ASSISTANT, 1);
}
public static void enableVoice() {
Settings.Global.putInt(null, DISABLE_VOICE_ASSISTANT, 0);
}AVM
@王岩
broadcastCloseSystemDialog(Context context, "avm");AVM影像浮层
@王岩@刘云松
broadcastCloseSystemDialog(Context context, "avm_window");镜像投屏/副屏投屏
@Pan7 Wang 王攀
// 镜像
broadcastCloseSystemDialog(Context context, "mirror");
// 后台副屏投屏
broadcastCloseSystemDialog(Context context, "background_start_app");OTA
@罗喻
发出广播,开始升级、结束升级
粘性广播,一个Action
public static final String ACTION_OTA_STATUS_CHANGE = "com.mi.car.action.OTA_STATUS_CHANGE";
//参数 boolean true ota 中,false 其他
public static final String EXTRA_UPGRADING = "com.mi.car.intent.extra.UPGRADING";
产品文档: